여러 디렉토리에 .zip 파일이 많이 있습니다.
Fol1/Fol2
Fol3
Fol4/Fol5
모든 파일을 공통 기본 폴더로 어떻게 이동합니까?
여러 디렉토리에 .zip 파일이 많이 있습니다.
Fol1/Fol2
Fol3
Fol4/Fol5
모든 파일을 공통 기본 폴더로 어떻게 이동합니까?
답변:
zip 파일 ( cd …
)을 포함하는 트리의 최상위 디렉토리로 이동 한 후 다음을 실행하십시오.
mv **/*.zip /path/to/single/target/directory
이것은 zsh에서 즉시 작동합니다. 쉘이 bash라면 shopt -s globstar
먼저 실행해야합니다 (이 명령을에 넣을 수 있어야합니다 ~/.bashrc
). 쉘이 ksh라면 set -o globstar
먼저 실행해야합니다 (에 넣으십시오 ~/.kshrc
).
또는 find
특별한 준비없이 모든 곳에서 작동하지만 더 복잡한 use를 사용하십시오 .
find . -name '*.zip' -exec mv {} /path/to/single/target/directory \;
나중에 zsh에서 빈 디렉토리를 제거하려면 다음을 수행하십시오.
rmdir **/*(/^Fod)
bash 또는 ksh에서 :
rmdir **/*/
제거 할 빈 디렉토리가있는 한 반복하십시오. 또는 모든 쉘에서
find . -depth -type d -empty -exec rmdir {} \;
find
위의 첫 번째 명령은 bash에서 작동했지만 find . -name
작동 하도록 etc로 변경 해야했습니다.
.
는 GNU 찾기에는 암시 적이지만 다른 사람들에게는 그렇지 않습니다.
이것은 데이터를 이동하고 오류가 없을 때 안전하며 버전에 관계없이 모든 배포판을 대부분 지원했습니다. 이 명령은 하위 디렉토리를 스캔 한 다음 새 대상 디렉토리로 이동하거나 복사합니다.
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 파일이 표시됩니다.
;
합니까?
bash hack으로 다음과 같은 기능을 사용할 수 있습니다 tar
.
(cd origin/;find . -exec file --mime-type "{}" \;|grep "application/zip"|cut -d ':' -f 1|xargs tar cf -)|(cd target/; tar xf -) && rm -fr origin/
file
명령을 사용하여 이동할 파일을 선택하고 디렉토리 구조를 유지하지만 공백이 포함 된 경로에서는 작동하지 않기 때문에 파일 확장자에 의존하지 않는 이점이 있습니다.
마지막 rm
은 원본 파일을 제거하는 것입니다 (@InquilineKea는 주석의 원본 폴더에 신경 쓰지 않는다고 말했기 때문에).
물론 이것은 origin / 및 target / 폴더가 다른 디스크에있는 경우에 특히 적합합니다. 그렇지 않으면 제안 된 다른 솔루션이 더 효율적입니다 ( file
콘텐츠 대신 명명 규칙에 의존하더라도 ).
find 및 mv의 GNU 버전이 있다고 가정하면 다음은 기존의 찾기 기반 답변보다 효율적입니다.
find . -name '*.zip' -exec mv --target-directory='/path/to/outputdir' '{}' +
+
find -exec의 끝에서 a 를 사용하면 파일 목록이 발견 된 파일 당 하나의 mv 명령을 실행하지 않고 mv 명령으로 전달됩니다. 그러나 이것의 한계는 명령의 끝에 '{}'만 놓을 수 있다는 것입니다. mv --target-directory 옵션을 사용해야하며, 이것이 GNU-ism이라는 것을 알고 있습니다.