한 번에 여러 파일을 특정 대상 디렉토리로 이동하는 방법은 무엇입니까?


152

이동하려는 일부 디렉토리 (다른 많은 파일과 함께)에 많은 파일이 있습니다.

운 좋게도 이동하려는 모든 파일에는 이름에 특정 식별자가 포함되어 있으므로 ls | grep IDENTIFIER이동할 파일의 정확한 목록을 얻을 수 있습니다 .

그러나 mv file /path/to/dest/folder/하나씩 실행 하지 않고 한 번에 어떻게 실행할 수 있습니까 (이동할 파일이 많습니까)?

답변:


100

이동할 경우 ABC-IDENTIFIER-XYZ.ext또는 IDENTIFIER-XYZ.xml, 당신은 사용할 수 있습니다 :

mv *IDENTIFIER* ~/YourPath/

*와일드 카드 인 0 개 이상의 문자 , 이는 0 개 이상의 문자 뒤에 IDENTIFIER이어 제로 이상의 문자 .

이 모든 파일 이동 포함IDENTIFIER 지정한합니다.


201

당신은 사용할 수 있습니다

mv -t DESTINATION file1 file2 file3

mv -t DESTINATION `ls|grep IDENTIFIER`

작동하지만 grep이 각 일치에 대해 새 줄을 출력하므로 mv가 여러 번 호출되는지 확실하지 않습니다.


5
리눅스에서 작동, 그것이 맥에서 작동하는지 확실하지 않음
Alexander Mills

3
windwow를 위해 git을 통해 mac 및 git bash에서 작동합니다.
Brandt Solovij

11
Mac (10.11.16 El Capitan)에서는 작동하지 않습니다. 그러나 대상 폴더를 뒷면에 간단히 넣을 수 있습니다.mv file1 file2 ... destination
Sheljohn

2
바꿈을


24

와일드 카드 를 사용할 수 있습니다 .

예 : 확장명이 .doc 인 모든 파일을 이동하려면

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

현재 디렉토리 아래의 모든 문서 파일을 특정 대상으로 이동합니다.

편집하다

댓글에 답하십시오.

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


2
그러나 이동할 파일 목록은 확장자에 의해 결정되지 않습니다. 일부 파일의 이름은 다음 ABC-IDENTIFIER-XYZ.ext과 같습니다. 일부 IDENTIFIER-XYZ.ext는 대부분 다른 확장자를 xml갖습니다 properties.
gilad hoch

@giladhoch 편집 된 것은 어떻습니까?
Achu

@gliadhoch grep을 사용하는 것이 편한 경우 위 / 아래의 답변을 볼 수 있습니다.
점화시

.xml이동하고 싶지 않은 다른 파일 (예 :)이 있기 때문에 작동하지 않습니다 .
gilad hoch

20

Rajanand 씨가 말한 것처럼 이름과 유형에 공통된 패턴이없는 관련없는 파일 세트를 이동하려는 경우 먼저 이동할 파일이 포함 된 디렉토리로 이동하십시오.

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

파일이 다른 디렉토리에 흩어져있는 경우 move 명령에서 각 파일의 경로 만 지정하면됩니다.


10

나는 tuomaz의 기술을 사용하지만 약간 수정되었습니다.

mv file1 file2 file3 -t DESTINATION

나는 바닐라 mv 작업과 동일한 순서를 사용하기 때문에 기억하기 쉽고 망치기가 더 어렵다는 것을 알았습니다.

mv file1 DESTINATION

에 대한 매뉴얼 페이지 mv에는 -t옵션이 언급 되어 있지 않습니다 .
Noumenon

2
linux.die.net/man/1/mv 그렇습니다
geoyws

7

이 명령을 사용하십시오 :

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

그러나 ls는 이런 종류의 사용에는 권장되지 않습니다. 대신 find 명령을 사용하십시오 .


8
ls이런 종류의 사용에는 권장되지 않습니다. 특히 grep뒤에서 파일을 나열 하려면을 사용하십시오 find . -name \*IDENTIFIER\*.
NorTicUs

이 답변은 mv에서 이전 명령의 출력을 사용하는 방법을 보여주기위한 것입니다. 질문에 ls | grep이 언급되었으므로 방금 복사했습니다.
점화시

3
@NorTicUs가 언급했듯이 ls의 사용은 좋지 않습니다. 또한 공백이있는 파일은 문제를 일으킬 수 있습니다.
Paddy Landau


5

이동할 파일이 너무 많으면 mv명령 (또는과 같은 다른 명령 rm)에 대해 너무 많은 파일을 가질 수 있습니다 . xargs루프와 같은 방식으로 각 파일을 개별적으로 이동 하는 것이 좋습니다 . 그 문제를 해결하는 한 가지 방법은 다음과 같습니다.

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

ls -1(마이너스 일)은 각 행에 하나의 파일 이름이 있음을 보장합니다. ls명령에 대한 별칭이 숨겨져 있으면 한 줄에 여러 개의 파일 이름이있을 수 있으며 의도하지 않은 파일을 이동할 수 있습니다.


이것은 IDENTIFIER가 와일드 카드로 쉽게 변환되지 않거나보다 복잡한 정규식으로 grep을 사용하려는 경우에도 유용합니다.
AggieBill

1
xargs의 경우 +1 찾기는 거의 항상 ls보다 낫고 안전합니다. 검색 . IDENTIFIER -exec mv {} / path / to / dest / folder \; (unested code)입니다. 현재 작업 디렉토리 용입니다. \; 실행할 명령을 종료하는 것입니다. 수행중인 작업에 따라 하위 디렉토리로 재귀하지 않도록 -maxdepth 1을 추가해야 할 수도 있습니다.
Joe

5

파일이 동일한 디렉토리에 있으면 사용할 수 있습니다

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

(우분투 16.04에서 테스트)


1
이것은 실제로 기존 답변에 무언가를 추가하지는 않습니다.
디저트

1
각 파일에 대해 dir의 전체 경로를 지정할 필요가 없습니다
Sruli

3
find -type f -name "[range]" -exec mv {} target-directory ';'

이 명령은 패턴 / 범위가있는 파일 이름을 대상 디렉토리로 이동합니다.

예.

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

이 같은 이름을 가진 파일을 이동 file1, file2... file50000target-directory.


2

ls의 출력을 사용하여 mv commnad에 입력 할 수 있습니다.

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

사이의 명령은 $()검색과 일치하는 파일 이름 목록을 반환하며 mv 명령의 매개 변수로 제공 될 수 있습니다.



1

이 명령을 사용하면 여러 파일을 이동할 수 있습니다.

mv SourceFilenames ~DestinationPath


1

가장 쉬운 방법은 이렇습니다

mv {file1,file2,file3} DESTINATION

또는 디렉토리

mv {directory1,directory2,directory3} DESTINATION

또는 파일과 디렉토리 모두

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

도움이 되었기를 바랍니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.