여러 하위 디렉터리에서 특정 확장자를 가진 모든 파일을 하나의 디렉터리로 이동합니다.

여러 하위 디렉터리에서 특정 확장자를 가진 모든 파일을 하나의 디렉터리로 이동합니다.

여러 디렉터리에 .zip 파일이 많이 있습니다.

Fol1/Fol2
Fol3
Fol4/Fol5

공통 기본 폴더로 모두 이동하려면 어떻게 해야 합니까?

답변1

cd …zip 파일( ) 이 포함된 트리의 최상위 디렉터리로 이동하여 다음을 실행합니다.

mv **/*.zip /path/to/single/target/directory/

이것은 zsh에서 바로 사용할 수 있습니다. 쉘이 bash인 경우 shopt -s globstar이를 먼저 실행해야 합니다(이 명령을 쉘에 넣을 수 있고 넣어야 합니다 ~/.bashrc). 쉘이 ksh인 경우 먼저 set -o globstar실행(에 넣어야 함 ~/.kshrc)해야 합니다.

또는 find특별한 준비 없이 어디서나 사용할 수 있지만 더 복잡한 를 사용하세요.

find . -name '*.zip' -exec mv {} /path/to/single/target/directory/ \;

이후에 빈 디렉토리를 삭제하려면 zsh에서 다음을 수행하십시오.

rmdir **/*(/^Fod)

Bash 또는 ksh에서:

rmdir **/*/

그리고 삭제해야 할 빈 디렉터리가 있는 한 반복합니다. 또는 어떤 쉘에서든

find . -depth -type d -empty -exec rmdir {} \;

답변2

파일을 이동하고 싶다면 .zip다음과 같이 할 수 있습니다.

mkdir ./zipfiles
find . -name "*.zip" -exec mv "{}" ./zipfiles \;

답변3

이는 데이터 이동 시 안전하고 오류가 없으며 버전에 관계없이 대부분의 배포판을 지원합니다. 이 명령은 하위 디렉터리를 검색한 다음 새 대상 디렉터리로 이동하거나 복사합니다.

find . -name *.flac -exec mv '{}' "./flac/" ";"
  • 이동하려는 파일이 포함된 하위 디렉터리가 포함된 홈 디렉터리에서 이 명령을 실행하세요.
  • 거기에서 귀하의 상황과 *.flac유사한 것으로 변경할 수 있습니다. *.zip아니면 *.doc어떤 확장이라도 가능합니다.
  • mv파일을 이동하는 명령이거나 이동 대신 데이터 복사를 사용할 수 있습니다 cp.
  • ./flac/모든 FLAC 파일을 이동하려는 대상 디렉토리입니다. 다음과 같이 전체 경로를 제공할 수도 있습니다./home/myid/flac/

완전한 예. (이 경우 음악 아티스트 이름이 있는 하위 디렉터리가 많이 있고 /home/myid/Music/FLAC 파일은 다른 하위 디렉터리 수준에 있습니다. 아티스트 폴더는 필요하지 않지만 모든 FLAC 파일을 하나의 디렉터리에 넣고 싶기 때문입니다./home/myid/Music/flac/

cd /home/myid/Music
mkdir flac
find . -name *.flac -exec mv '{}' "./flac/" ";"
cd flac
ls

그러면 모든 FLAC 파일이 표시됩니다.

답변4

find 및 mv의 GNU 버전이 있다고 가정하면 다음은 기존 찾기 기반 답변보다 더 효율적입니다.

find . -name '*.zip' -exec mv --target-directory='/path/to/outputdir' '{}' +

+find -exec 끝에 a를 사용하면 발견된 각 파일에 대해 mv 명령을 실행하는 대신 파일 목록이 mv 명령으로 전달됩니다. 그러나 이에 대한 한 가지 제한 사항은 명령 끝에 "{}"만 넣을 수 있다는 것입니다. 이를 위해서는 mv --target-directory 옵션을 사용해야 하며, 이는 제가 아는 한 GNU-ism입니다.

관련 정보