모든 .txt 파일을 하나의 디렉터리로 이동합니다.

모든 .txt 파일을 하나의 디렉터리로 이동합니다.

수천 개의 파일이 포함된 거의 6000개의 디렉터리가 있습니다.

all/recup_dir.1/1.txt
all/recup_dir.1/2.jpg
...
all/recup_dir.5987/1.txt
all/recup_dir.5987/2.txt
...

all/txt 폴더의 모든 .txt 파일을 이동하고 싶습니다. 나는 다음 명령을 사용했습니다.

mv **/*.txt txt

하지만 다음 오류가 발생합니다.

bash /bin/mv arg list too long

어떡해?

답변1

find해결책:

find all -type f -name "*.txt" ! -path "all/txt/*" -exec echo mv -t all/txt '{}' \;

답변2

어쩌면 이것을 시도해보십시오. 방금 이동한 파일을 이동하지 않으려면 해당 파일을 all/txt외부의 새 디렉터리로 이동한 다음 아래로 이동하세요. 여기 있습니다:txtalltxtall

$ mkdir txt

다음 기사는 단지인쇄모든 이동 명령. 표시된 내용이 마음에 드는지 확인하세요.

$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/\1-\2.txt"#p'
mv -n "all/recup_dir.20/2.txt" "txt/20-2.txt"
mv -n "all/recup_dir.20/1.txt" "txt/20-1.txt"
mv -n "all/recup_dir.19/5.txt" "txt/19-5.txt"
mv -n "all/recup_dir.19/4.txt" "txt/19-4.txt"
...

만족스러우면 다음을 추가하여 실행하세요 | sh.

$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/\1-\2.txt"#p' | sh

txt그런 다음 해당 위치에 넣으십시오 .

$ mv txt all

관련 정보