![특정 파일 확장자를 가진 모든 파일을 하위 디렉터리에서 단일 디렉터리로 이동하는 방법](https://linux55.com/image/44725/%ED%8A%B9%EC%A0%95%20%ED%8C%8C%EC%9D%BC%20%ED%99%95%EC%9E%A5%EC%9E%90%EB%A5%BC%20%EA%B0%80%EC%A7%84%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%EB%8B%A8%EC%9D%BC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
많은 하위 디렉터리가 있는 디렉터리가 있습니다. 하위 디렉터리에는 다양한 파일 확장자를 가진 다양한 유형의 파일이 포함되어 있습니다. 한 유형의 모든 파일을 새 디렉토리로 이동(복사 아님)하고 싶습니다. 이 모든 파일이 동일한 디렉토리에 있어야 합니다. 즉, 플랫해야 합니다.
(나의 사용 사례는 *.epub이라는 이름의 전자책을 여러 디렉터리에서 EPUB 리더가 찾을 수 있는 단일 폴더로 옮기고자 하는 것입니다.)
답변1
zsh에서는 재귀 글로브를 사용할 수 있습니다.
mkdir ~/epubs
mv -- **/*.epub ~/epubs/
bash ≥4에서 실행 shopt -s globstar
(이것을 에 넣을 수 있음 ~/.bashrc
)한 다음 위 명령을 실행합니다. ksh에서 set -o globstar
먼저 실행하십시오.
POSIX 도구만 사용하여 다음을 실행합니다 find
.
find . -name '*.epub' -exec mv {} ~/epubs \;
답변2
이 시도:
mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;
모든 파일의 이름이 지정된 경우 name.epub
다음과 같은 변수를 증가시켜야 합니다(사용하여세게 때리다)
mkdir ../new_dir
find . -type f -name '*.epub' |
while read a; do
((c++))
base="${a##*/}"
mv "$a" "../new_dir/${base%.epub}_$(printf %.03d $c).epub"
done
답변3
Linux에서 bash 사용:
shopt -s nullglob globstar
mv -t ~/epub_directory ~/big_dir/**/*.epub