Jak przenieść wiele plików jednocześnie do określonego katalogu docelowego?

152

Mam kilka plików w pewnym katalogu (wraz z wieloma innymi plikami), które chcę przenieść.

Na szczęście wszystkie pliki, które chcę przenieść, zawierają w swoich nazwach określony identyfikator, dzięki czemu mogę ls | grep IDENTIFIERuzyskać dokładną listę plików do przeniesienia.

Ale jak mogę wykonać mv file /path/to/dest/folder/od razu, a nie jeden po drugim (jest wiele plików do przeniesienia)?

Gilad Hoch
źródło

Odpowiedzi:

100

Jeśli chcesz się przenieść ABC-IDENTIFIER-XYZ.extlub IDENTIFIER-XYZ.xmlmożesz użyć:

mv *IDENTIFIER* ~/YourPath/

*jest symbolem wieloznacznym dla zera lub więcej znaków , oznacza to zero lub więcej znaków , po których IDENTIFIERnastępuje, a następnie zero lub więcej znaków .

Spowoduje to przeniesienie wszystkich plików, które zawierająIDENTIFIER określone przez Ciebie.

Evandro Silva
źródło
201

Możesz użyć

mv -t DESTINATION file1 file2 file3

i

mv -t DESTINATION `ls|grep IDENTIFIER`

działa, ale nie jestem pewien, czy mv jest wywoływany wiele razy, czy nie, ponieważ grep wyświetli nową linię dla każdego dopasowania.

tuomaz
źródło
5
działa na systemie Linux, nie jestem pewien, czy będzie działał na Macu
Alexander Mills
3
działa na Mac i Git Bash przez git dla okien.
Brandt Solovij
11
Nie działa na Macu (10.11.16 El Capitan). Ale możesz po prostu umieścić folder docelowy z tyłu, tj.mv file1 file2 ... destination
Sheljohn,
2
-1 dla drugiego podejścia, ponieważ spadnie dla plików zawierających nowe linie
αғsнιη
24

Możesz używać symboli wieloznacznych .

Przykład: Aby przenieść wszystkie pliki o rozszerzeniu .doc

mv *.doc /path/to/dest/folder/

Spowoduje to przeniesienie całego pliku doc ​​w bieżącym katalogu do określonego miejsca docelowego.

Edytować

Aby odpowiedzieć na komentarz.

mv *.ext *.xml *.txt /path/to/dest/folder/

Achu
źródło
2
ale lista plików do przeniesienia nie jest określona przez rozszerzenie. niektóre pliki mają nazwy: ABC-IDENTIFIER-XYZ.exta niektóre po prostu IDENTIFIER-XYZ.extmają różne rozszerzenia, głównie xmllub properties.
gilad hoch
@ giladhoch A co z edytowanym?
Achu,
@gliadhoch Jeśli czujesz się komfortowo używając grep, możesz zobaczyć moją odpowiedź powyżej / poniżej.
rozpalić
nie będzie działać, ponieważ istnieją inne .xmlpliki (na przykład), których nie chcę przenosić.
gilad hoch
20

Jeśli chcesz przenieść zestaw nieistotnych plików (brak wspólnego wzorca w nazwach i typach), możesz zrobić tak, jak powiedział pan Rajanand: najpierw przejdź do katalogu zawierającego pliki, które chcesz przenieść

mv file1.ext1 file2.ext2 file3.ext3.. /destination/

W przypadku, gdy pliki są rozproszone w różnych katalogach, wystarczy podać ścieżkę do każdego pliku w poleceniu move

Ismail AL-taharwa
źródło
10

Używam techniki tuomaz, ale nieco zmodyfikowanej:

mv file1 file2 file3 -t DESTINATION

Uważam, że jest to łatwiejsze do zapamiętania i trudniejsze do zepsucia, ponieważ używa tego samego porządku co operacja waniliowa mv:

mv file1 DESTINATION
Blake Frederick
źródło
Strona podręcznika dla mvnie wspomina o żadnej -topcji.
Noumenon
2
linux.die.net/man/1/mv tak to robi
geoyws
7

Użyj tego polecenia:

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

Jednak ls nie jest zalecany do tego rodzaju zastosowań. Zamiast tego użyj polecenia find .

zapalać
źródło
8
lsnie jest zalecany do tego rodzaju użytkowania. Jeśli chcesz wyświetlić listę plików, zwłaszcza z greptyłu, użyj find . -name \*IDENTIFIER\*.
NorTicUs,
Ta odpowiedź miała jedynie pokazać, w jaki sposób można użyć danych wyjściowych poprzedniego polecenia w mv. Jak wspomniano w ls | grep, właśnie go skopiowałem.
rozpalić
3
Jak stwierdził @NorTicUs, użycie ls nie jest zalecane. Również pliki ze spacjami mogą powodować problem.
Paddy Landau
5

Jeśli masz tyle plików do przeniesienia, możesz mieć ich zbyt wiele dla mvpolecenia (lub innych poleceń, takich jak rm). Sugeruję użycie, xargsaby przenieść każdy plik osobno w pętli jak w modzie. Jednym ze sposobów obejścia tego jest:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

ls -1(Minus jeden) zapewnia, że istnieje tylko jedna nazwa pliku na każdej linii. Jeśli masz ukryte aliasy dla lspolecenia, możesz mieć wiele nazw plików w jednym wierszu i przypadkowo przenieść plik, którego nie zamierzałeś przenieść.

AggieBill
źródło
Jest to również przydatne, gdy IDENTYFIKATOR nie daje się łatwo zamienić na symbol wieloznaczny lub chcesz użyć grep z bardziej złożonym wyrażeniem regularnym.
AggieBill,
1
+1 dla xargs. find jest prawie zawsze lepszy i bezpieczniejszy niż ls. odnaleźć . IDENTYFIKATOR -exec mv {} / path / to / dest / folder \; (nieprzetestowany kod). dotyczy bieżącego katalogu roboczego. \; ma zakończyć polecenie, które ma zostać wykonane. W zależności od tego, co robisz, konieczne może być dodanie parametru -maxdepth 1, aby uniemożliwić rekurencję w podkatalogach.
Joe
5

Jeśli pliki znajdują się w tym samym katalogu, możesz użyć

mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/

(testowany w Ubuntu 16.04)

Sruli
źródło
1
To tak naprawdę nie dodaje czegoś do istniejących odpowiedzi, nie sądzisz?
deser
1
po prostu eliminuje potrzebę podawania pełnej ścieżki do katalogu dla każdego pliku
Sruli
3
find -type f -name "[range]" -exec mv {} target-directory ';'

to polecenie przenosi nazwy plików o dowolnym wzorze / zakresie do katalogu docelowego.

na przykład.

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

będzie przenieść pliki o nazwach takich jak file1, file2... file50000do target-directory.

użytkownik734124
źródło
2

Możesz użyć wyjścia z ls do wprowadzenia do komendy mv commnad

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

Komenda między $()zwraca listę nazw plików pasujących do wyszukiwania, które można podać jako parametr dla komendy mv.

Fuad Saud
źródło
1
nie analizujls
Zanna
1

Za pomocą tego polecenia możesz przenosić wiele plików.

mv SourceFilenames ~DestinationPath

Rajanand
źródło
1

Najłatwiej jest to zrobić

mv {file1,file2,file3} DESTINATION

lub katalog

mv {directory1,directory2,directory3} DESTINATION

lub zarówno pliki, jak i katalogi

mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION

Mam nadzieję że to pomoże

Sabrina
źródło