Jak przenieść pliki i katalogi do folderu nadrzędnego w systemie Linux?

77

W systemie Linux (Ubuntu), jak przenieść wszystkie pliki i katalogi do katalogu nadrzędnego?

slhck
źródło
pytanie z najbardziej kompletną odpowiedzią, jaką
DJCrashdummy

Odpowiedzi:

66
odnaleźć . -maxdepth 1 -exec mv {} .. \;

spowoduje to również przeniesienie ukrytych plików.

Otrzymasz wiadomość:

mv: nie można przenieść `. ' na `../. ': Urządzenie lub zasób zajęty

kiedy próbuje się przenieść .(bieżący katalog), ale to nie spowoduje żadnej szkody.

John T.
źródło
1
Przeniesie także wszystkie pliki ze wszystkich podkatalogów do elementu nadrzędnego bieżącego katalogu. Chciałbym -maxdepth 1się upewnić.
ℝaphink
1
Teraz mówi: mv: nie można przenieść ./scripts' to ../scripts ': katalog nie jest pusty
1
Musisz mieć katalog o nazwie skrypty w katalogu nadrzędnym ORAZ w bieżącym katalogu. Będziesz musiał zmienić nazwę tego, zanim go przeniesiesz.
ℝaphink
1
Działało, ale zostawiłeś jedną bardzo ważną informację - musisz uruchomić ją z podkatalogu. Nie spowoduje to również usunięcia samego podkatalogu, dlatego należy wykonać kopię zapasową jednego katalogu i wykonać rmdir w tym podkatalogu.
rzemieślnik
89

Przyjechałem tutaj, ponieważ jestem również nowy w tym temacie. Z jakiegoś powodu powyższe nie zadziałało dla mnie. Aby przenieść wszystkie pliki z katalogu do katalogu nadrzędnego, wykonałem:

cd to/the/dir
mv * ../
Ben Fransen
źródło
12
Nie przenosi to jednak ukrytego pliku
Wavesailor,
1 linijka:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd
10

Wpisz to w powłoce:

mv *.* ..

To przenosi WSZYSTKIE pliki o jeden poziom wyżej.

Postać *jest symbolem wieloznacznym. Tak więc *.debprzeniesie wszystkie pliki .deb i Zeitgeist.*przeniesie Zeitgeist.avi i Zeitgeist.srt o jeden folder w górę, ponieważ, oczywiście, ..wskazuje katalog nadrzędny.

Aby przenieść wszystko, w tym foldery itp., Po prostu użyj *zamiast*.*

Gil
źródło
3
to nie działało z reżimami! lub ukryte pliki
Działa z reżimami, przynajmniej dla mnie.
maaartinus
5
Chcesz *nie *.*obejmuje katalogów
Chris S
To miły dokument
BlackBurn027,
6

Nie może być prostsze niż:

mv * ../

Aby przenieść również ukryte pliki:

mv /path/subfolder/{.,}* /path/ 

mvto polecenie do przenoszenia plików, *oznacza wszystkie pliki i foldery i ../jest ścieżką do katalogu nadrzędnego.

William Edwards
źródło
2

W bashu można użyć shopt -s dotglob zrobić * meczu wszystkie pliki i przenieść je po prostu

shopt -s dotglob; mv * ..

To nie jest najlepsze rozwiązanie, ponieważ ustawienie jest stałe dla powłoki, dopóki jej nie zmienisz

shopt -u dotglob

ale myślę, że dobrze wiedzieć.

maaartinus
źródło
4
Nazywają go w podpowłoce: (shopt -s dotglob && mv * ..). W ten sposób opcja jest lokalna tylko dla tej podpowłoki.
Martin Ueding
Dobra odpowiedź - jest prosta, zawiera ukryte pliki i nie powoduje błędu przy kopiowaniu „”. i „..”
Daniel Howard
1

Metoda, która nie powoduje błędów i działa za każdym razem:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
djhaskin987
źródło
1
find . -maxdepth 2 -type f -exec mv {} .. \;

Użyłem odmiany powyżej, aby przenieść wszystkie pliki z podfolderów do elementu nadrzędnego.

Mam dane w folderach z roku na rok, ale dzięki metadanych mogłem mieć je wszystkie w tym samym folderze, co ułatwiło zarządzanie.

na przykład.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
Bill Bixby
źródło
0

Zakładając, że wszystkie twoje ukryte pliki zaczynają się od kropki, a następnie litery lub cyfry (które powinny), możesz użyć

mv * .[A-Za-z0-9]* ..

.[A-Za-z0-9]*Część jest upewnienie się, że nie starają się poruszać .lub ..wzdłuż, które zawodzą.

Inkaphink
źródło
0

W Linuksie łatwo jest przenieść wszystkie pliki i foldery do katalogu nadrzędnego.

Przejdź do tego folderu i użyj tego polecenia:

mv * /the full path

Na przykład jeśli twoje pliki i foldery są następujące:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Przejdź do tego folderu przez cd:

cd /home/abcuser/test
mv * /home/abcuser

Wszystkie twoje pliki i foldery zostaną przeniesione do folderu abcuser (katalog nadrzędny).

Abhishek
źródło
2
Dzięki @Gareth, miałem to samo. Abhishek, proszę nie publikować żadnych niepowiązanych linków, jaki jest w tym sens? Sprawdź również formatowanie. Dodatkowo /the full pathnie działa w systemie Linux, musisz uciec spacjami /the\ full\ path.
slhck,
0

Nie ma potrzeby zmiany katalogów. Wystarczy dołączyć * na końcu ścieżki:

mv /my/folder/child/* /my/folder/

Powyżej przenosi tylko nie ukryte pliki. Aby przenieść tylko ukryte pliki, użyj. *

mv /my/folder/child/.* /my/folder/

Powyższe dwa można połączyć w jedno polecenie:

mv /my/folder/child/{.,}* /my/folder/

Zobacz także: Jak przenieść wszystkie pliki, w tym pliki ukryte, do katalogu nadrzędnego za pomocą *

Shital Shah
źródło
0
find -type f|while read line; do mv $line ${line##*/}; done
Adler
źródło
Dzięki za udzielenie odpowiedzi. Chociaż może to działać w prostych scenariuszach, przesyłanie finddo while readjest złym sposobem użycia find, a lepsze odpowiedzi zostały już opublikowane.
Scott
-1

przejdź do podkatalogu i wykonaj następujące polecenie, aby skopiować lub przenieść pliki.

np .: a to katalog nadrzędny, a b to podkatalog, chcemy przenieść / skopiować wszystkie pliki z b do a (podkatalog do katalogu nadrzędnego).

cd b
cp * ..
mv * ..
M. Ikram
źródło
Witamy w Super User! To powiela inną odpowiedź i nie dodaje żadnej nowej treści. Nie publikuj odpowiedzi, chyba że masz coś nowego do dodania.
DavidPostill