특정 파일 확장자를 가진 모든 파일을 하위 디렉터리에서 단일 디렉터리로 이동하는 방법

특정 파일 확장자를 가진 모든 파일을 하위 디렉터리에서 단일 디렉터리로 이동하는 방법

많은 하위 디렉터리가 있는 디렉터리가 있습니다. 하위 디렉터리에는 다양한 파일 확장자를 가진 다양한 유형의 파일이 포함되어 있습니다. 한 유형의 모든 파일을 새 디렉토리로 이동(복사 아님)하고 싶습니다. 이 모든 파일이 동일한 디렉토리에 있어야 합니다. 즉, 플랫해야 합니다.

(나의 사용 사례는 *.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

관련 정보