Jak przenieść wszystkie pliki z jednego folderu do drugiego za pomocą wiersza polecenia?

245

Chciałbym wiedzieć, jak przenieść wszystkie pliki z folderu do innego folderu za pomocą wiersza polecenia.

Powiedzmy, że jestem w folderze Pobrane, a jest 100 plików, które chciałbym przenieść do folderu Wideo, bez konieczności zapisywania wszystkich nazw plików.

Michael
źródło
Pytasz o przeprowadzkę, filesale ludzie pokazują ci, jak się poruszać nie tylko, filesale folderstakże. Czy to w porządku?
Askar
2
@ Hontvári Levente udzielił rok temu odpowiedzi, która wydaje się być najlepsza, czysta, prosta i działa. Więc w jaki sposób otrzymał tylko 3 głosy (w porównaniu z 262 za odpowiedź znajdującą się obecnie na górze)?
Ray Butterworth,

Odpowiedzi:

331

Otwórz terminal i wykonaj następujące polecenie:

mv  -v ~/Downloads/* ~/Videos/

Przeniesie wszystkie pliki i foldery z folderu Pobrane do folderu Wideo.


Aby przenieść wszystkie pliki, ale nie foldery:

Jeśli chcesz przenieść wszystkie pliki (ale nie foldery) z folderu Pobrane do folderu Wideo, użyj tego polecenia

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Aby przenieść tylko pliki z folderów pobierania, ale nie z podfolderów:

Jeśli chcesz przenieść wszystkie pliki z folderu Pobrane, ale żadnych plików w folderach w folderze Pobrane, użyj tego polecenia:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

tutaj -maxdepthopcja określa, jak głębokie próbować powinno się znaleźć, 1oznacza to tylko katalog określony w poleceniu find. Możesz spróbować użyć 2, 3również do testowania.

Zobacz stronę podręcznika użytkownika Ubuntu, aby uzyskać szczegółowe wyjaśnienie

Anwar
źródło
3
możesz użyć samego mv, aby przenieść cały katalog do innego folderu: mv folder ~ / Documents
JohnMerlino
20
FYI Wierzę, że twoje pierwsze polecenie („mv -v ~ / Downloads / * ~ / Videos /”) nie przenosi plików kropek.
Mark Doliner
1
Tak, to nie będzie przenieść .files
Anwar
3
Uwaga Twój -print0 | xargs -0 mv -t ~/Videosmoże być bardziej efektywnie zrobić z -exec mv -t ~/Videos \{\} \+:-)
artfulrobot
3
mv -v ~/Downloads/* ~/Videos/nie działa w przypadku ukrytych plików
FreeLightman
28
mv ~/Downloads/* ~/Videos

Przeniesie wszystkie pliki, w tym podfoldery, do katalogu, który chcesz mv. Jeśli chcesz cp(skopiować) lub rm(usunąć), będziesz potrzebować opcji -r(rekurencyjnej), aby dołączyć podfoldery.

użytkownik223289
źródło
2
Moje polecenie mv nie ma opcji -R (Ubuntu 14.04).
Mark Doliner,
1
@MarkDoliner, tak, mvnie potrzebuje opcji rekurencyjnej, aby uwzględnić podfoldery. Można go również użyć do zmiany nazwy.
Alen,
Nie potrzebowałem *. To samo stało się bez użycia gwiazdy.
MycrofD
~ / W prefiksie nazw folderów nie zawsze działa (nie działa przynajmniej na bash i git)
Krish Munot
To rozwiązanie spowoduje błąd, jeśli katalog źródłowy jest pusty.
Pierre Thibault,
11

W prostym przypadku:

mv ~/Downloads/* ~/Videos

Jeśli chcesz również przenieść pliki kropkowe (ukryte), ustaw opcję powłoki dotglob .

shopt -s dotglob
mv ~/Downloads/* ~/Videos

To pozostawia zestaw opcji powłoki.

Aby jednorazowo użyć dotglob, uruchom polecenia w podpowłoce:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
Hontvári Levente
źródło
Uwaga dla siebie: Ostatnia opcja (shopt -s dotglob; mv ~/Downloads/* ~/Videos) tylko porusza (cięcia) treść (w tym ukrytych plików). W takim przypadku zarówno folder źródłowy, jak i docelowy muszą już istnieć. Na koniec katalog źródłowy staje się pusty.
Pathros
To powinna być zaakceptowana odpowiedź
megar
11

Jest to możliwe przy użyciu rsync, na przykład:

rsync -vau --remove-source-files src/ dst/

gdzie:

-v, --verbose: Zwiększenie gadatliwości.

-a, --archive: Tryb archiwizacji; wynosi -rlptgoD(bez -H, -A, -X).

-u, --update: Pomiń pliki, które są nowsze w odbiorniku.

--remove-source-files Mówi rsyncto o usunięciu ze strony wysyłającej plików (czyli nie-katalogów), które są częścią transferu i zostały pomyślnie zduplikowane po stronie odbierającej.

Jeśli masz uprawnienia administratora, przedrostek z sudozastąpi potencjalne problemy z uprawnieniami.

kenorb
źródło
1
OSTRZEŻENIE! jak zaznaczono, opcja --delete-after nie działa w oczekiwany sposób. Nie usuwa plików źródłowych po udanym kopiowaniu ... USUWA WSZYSTKIE POZOSTAŁE / INNE PLIKI W CELU. (jak zauważył @kenorb ... ale nie przeczytałem wystarczająco uważnie! DOH)
Jay Marm
4

Posługiwać się

mv -v ~/rootfolder/branch/* ~/rootfolder

Mam nadzieję, że to pomoże. Ponieważ odczuwałem ten sam ból i traciłem dużo czasu na naprawę mojego błędu.

Udit Chugh
źródło
2

Aby przenieść katalog z zawartością lub bez do nowej nazwy, tak jak w przypadku mvpolecenia zmieniającego nazwę pliku:

mv -T dir1 dir2

gdzie:

  • -T traktuje miejsce docelowe jako zwykły plik
  • dir1 to oryginalna nazwa katalogu
  • dir2 to nowa nazwa katalogu

NB: dir2nie musi istnieć.

Mam nadzieję, że zaoszczędzi to komuś dużo czasu, ponieważ noob, wcześniej utworzyłem katalog z nową nazwą, a następnie przeniosłem zawartość katalogu do wcześniej utworzonego katalogu.

Użyj dla podkatalogów

To polecenie jest przydatne, gdy wiele plików zostało zapisanych w podfolderze katalogu docelowego, tj Downloads/mp4. W tym przykładzie uruchomienie mv -T Downloads/mp4 Videosspowoduje usunięciemp4 podfolderu i przeniesienie wszystkich zawartych w nim plików do folderu Wideo.

Feyisayo Sonubi
źródło
1
+1, ponieważ testowany w Xubuntu 14.04. Dodałem przykład w tej odpowiedzi, aby pokazać, że to polecenie spowoduje dir1usunięcie. Oprócz tego środka ostrożności w odpowiedzi odnotowano coś dobrego do codziennego użytku.
clearkimura,
1
„Aby przenieść katalog z zawartością lub bez do nowej nazwy” Jak przenieść katalog ... do nazwy? To nie ma sensu. „-T traktuje cel jako zwykły plik”. Jak cel może być plikiem? Masz na myśli katalog?
Monica Heddneck
To jak zmiana nazwy pliku na nową nazwę, tak jak zrobiłbyś to z czymś podobnym, mv fileA fileBale -Tflaga w tym przypadku traktuje katalog docelowy / jako plik i zmienia jego nazwę.
Feyisayo Sonubi 30.04.17
Pracował dla mnie :)
Naveen Kumar V
1
  1. Przejdź do wiersza poleceń i przejdź do katalogu, do którego chcesz go przenieść cd folderNamehere
  2. Typ pwd. Spowoduje to wydrukowanie katalogu, który chcesz przenieść.
  3. Następnie przejdź do katalogu, w którym znajdują się wszystkie pliki cd folderNamehere
  4. Teraz, aby przenieść wszystkie typy plików mv *.* typeAnswerFromStep2here

To przeniesie wszystkie pliki z tego katalogu do drugiego.

jrh
źródło
3
Nie będzie pasowało do plików bez żadnego rozszerzenia. na przykład, jeśli folder zawiera pliki: foo.txt, bar.a barzarówno bar.i barnie zostaną przeniesione. Używanie *zamiast *.*zajmuje się tym. Ale w obu przypadkach ukryte pliki, takie jak: .foobarnie zostaną przeniesione.
Dan
1
mv source_path/* destination_path/

tutaj musisz podać ukośnik i *po ścieżce źródłowej, aby zabrał pliki do ścieżki_źródłowej zamiast do pełnego katalogu źródłowego.

Przykład: mv /home/username/test/* /home/username/test2/

Powyższe polecenie przenosi wszystkie pliki (chyba że są ukryte) z katalogu źródłowego do katalogu docelowego.

vivek Kumar
źródło
0

Spróbuj

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type z argumentem -type możesz podać typ file.on tej instrukcji, która jest średnim plikiem. if, używając -d oznacza katalog.

-iname: najczęstszą i najbardziej oczywistą metodą wyszukiwania pliku jest użycie jego argumentu -name. jeśli nie masz pewności co do wielkości liter, możesz użyć argumentu -iname

mv {} i na koniec określić katalog docelowy, a następnie przenieść tam pliki za pomocą argumentu mv {}

Pedram Shabani
źródło