여러 장의 사진이 담긴 폴더가 있습니다. 파일 이름을 모두 소문자로 변환한 다음 특정 문자열을 모두 제거하고 싶습니다.
예를 들어 앞으로는 , , , 및 BILD02_CMYK_freigestellt_RENDER_3D.jpg
연결된 단어를 삭제해야 합니다. 지금까지 다음과 같은 조합이 있지만 이것이 첫 번째 단락이 되며 모든 항목이 아닌 첫 번째 항목만 삭제됩니다.cmyk
render
3d
_
// Rename names to lowercase
for file in *;
do
mv "$file" "$file.tmp";
mv "$file.tmp" "`echo $file | tr "[:upper:]" "[:lower:]"`";
done
// Remove cmyk from filename
// optimierung: macht es nur einmal bei einer datei - ----
for file in *; do mv "${file}" "${file/cmyk/}"; done
for file in *; do mv "${file}" "${file/freigestellt/}"; done
for file in *; do mv "${file}" "${file/-/_}"; done
답변1
rename -n '$_=lc; s/(cmyk|freigestellt|render|3d|_|-)//g' *.jpg
이는 다음을 사용합니다.진주prename
이름 바꾸기 명령( 및 라고도 함 file-rename
) 이것은아니요rename
명령줄 옵션과 기능이 완전히 다른 util-linux의 명령과 혼동됩니다 .
먼저 Perl의 기능을 사용하여 파일 이름을 소문자로 변환한 lc()
다음 텍스트나 샘플 코드에서 언급한 모든 단어와 문자를 제거합니다.
이 -n
옵션을 사용하면 rename
연습 실행이 발생합니다. 허용한 경우 수행할 작업만 표시됩니다. 실제로 파일 이름을 바꾸려면 해당 파일을 제거 하거나 자세한 출력으로 -n
바꾸십시오 .-v
예를 들어
$ touch BILD{00..05}_CMYK_freigestellt_RENDER_3D.jpg
$ rename -v '$_=lc; s/(cmyk|freigestellt|render|3d|_|-)//g' *.jpg
BILD00_CMYK_freigestellt_RENDER_3D.jpg renamed as bild00.jpg
BILD01_CMYK_freigestellt_RENDER_3D.jpg renamed as bild01.jpg
BILD02_CMYK_freigestellt_RENDER_3D.jpg renamed as bild02.jpg
BILD03_CMYK_freigestellt_RENDER_3D.jpg renamed as bild03.jpg
BILD04_CMYK_freigestellt_RENDER_3D.jpg renamed as bild04.jpg
BILD05_CMYK_freigestellt_RENDER_3D.jpg renamed as bild05.jpg