약 360,000개의 파일이 있습니다. 예를 들면 다음과 같습니다.
./001/1/1.jpg
./001/1/2.jpg
./001/2/1.jpg
./002/1/1.jpg
./003/1/1.jpg
...
pattern: [60 dirs]/[1000 subdirs]/[4-10 files].jpg
rename
예를 들어 파일 이름을 *.jpg에서 *.jpeg로 바꾸고 싶습니다 . rename
인수 목록이 너무 길다는 오류가 발생하기 때문에 Single을 사용하여 이 작업을 수행할 수 없습니다 .
해결책을 찾는 동안 이것을 찾았지만 이름은 바뀌지 않았습니다.
find -maxdepth 2 -mindepth 2 -type d -exec rename -n 's/jpg/jpeg/' {}/* \;
확장 되었는지 확인할 때 {}
이름 바꾸기를 echo로 바꾸세요.
find -maxdepth 2 -mindepth 2 -type d -exec echo "rename -n 's/jpg/jpeg/' {}/*" \;
예상되는 결과를 얻습니다.
rename -n 's/jpg/jpeg/' ./061/61430/*
rename -n 's/jpg/jpeg/' ./061/61431/*
...
이러한 이름 바꾸기 명령을 실행하면 작업 이름이 변경됩니다. 그래서 그것이 질문이 되어야 합니다 {}
.
도와주셔서 감사합니다!
답변1
첫 번째 경우 명령 은 , 및 세 개의 인수를 사용하여 실행 *
됩니다 . 마지막 인수는 기존 파일의 이름이 아니므로 아무 작업도 수행하지 않습니다.rename
{}/*
rename
-n
s/jpg/jpeg/
some/path/*
rename
쉘 와일드카드가 없으면 경로는 rename
.
따라서 다음을 수행하십시오.
find -maxdepth 3 -mindepth 3 -type f -iname '*.jpg' -exec rename -n 's/jpg$/jpeg/i' {} +
find
+
가능할 때마다 대신 명령줄을 작성하는 기능을 사용하십시오 ;
.
답변2
find | prename 's/\.jpg$/.jpeg/'
또는 현재 디렉터리에 주문 파일이 있는 경우
find 0[0-9][0-9] | prename 's/\.jpg$/.jpeg/'
답변3
type d
디렉토리 이름을 바꾸려는 경우가 아니면 이를 지정해서는 안 됩니다. 확장자를 변경 하려면 다음을 .jpg
시도해 보세요..jpeg
find . -maxdepth 2 -mindepth 2 -name '*.jpg' -exec sh -c 'echo mv -- "$0" "${0%%.jpg}.jpeg"' {} \;
echo
화면에 표시되는 내용이 마음에 들면 삭제하세요.
답변4
cygwin을 사용하면 이름이 변경된 버전에 정규식 대체가 없으며 해당 rename [options] expression replacement file...
구문도 작동하지 않는 것 같습니다. 또한 bash 제안이 실패합니다.
... -c: line 0: unexpected EOF while looking for matching `"'
... -c: line 1: syntax error: unexpected end of file
아아... 항상 Perl이 있습니다.
perl -MFile::Find -e 'find(sub{return unless /^(.*)\.jpg$/;`mv $_ $1.jpeg`}, ".")'