수천 개의 파일이 포함된 거의 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
외부의 새 디렉터리로 이동한 다음 아래로 이동하세요. 여기 있습니다:txt
all
txt
all
$ 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