일부 파일의 이름을 다음 형식으로 바꾸고 싶습니다.
ABCD_20181102.jpg
DEDE_2_20181030.jpg
일반적으로 4개의 임의 문자로 구성되며 그 뒤에 밑줄과 날짜(년, 월, 일)가 표시됩니다. 또는 임의의 문자 4개, 밑줄, 임의의 숫자, 밑줄, 날짜 순입니다.
이 파일의 이름을 날짜(또는 필요한 경우 임의의 숫자)로 바꾸고 다음과 같은 임의의 문자로 바꾸고 싶습니다.
20181102_ABCD.jpg
20181030_2_DEDE.jpg
답변1
매개변수 확장을 사용하여 문자열의 일부를 추출할 수 있습니다. #
왼쪽에서 제거하고, %
오른쪽에서 제거하고, 기호를 두 배로 늘리면 가능한 가장 긴 일치 항목이 제거됩니다.
#! /bin/bash
for f in ABCD_20181102.jpg DEDE_2_20181030.jpg ; do
suffix=${f#*.}
before_underscore=${f%%_*}
after_underscore=${f#*_}
after_underscore=${after_underscore%.$suffix}
if [[ $after_underscore = *_* ]] ; then
before2=${after_underscore%_*}
after2=${after_underscore#*_}
after_underscore="$after2"_"$before2"
fi
echo mv "$f" "$after_underscore"_"$before_underscore.$suffix"
done
스크립트가 요구 사항을 충족하는지 확인한 후 echo
이전 콘텐츠를 제거하면 됩니다.mv
답변2
Larry Wall 이름이 변경된 경우
rename -n -e 's/.*_.*/$2_$1/' «file list»
-n
출력에 올바르게 실행될 것으로 표시되면 제거하여 활성화하세요. (위의 내용은 수행할 작업을 설명하지만 수행하지는 않습니다.)
답변3
그리고 mmv
:
$ mmv -n '*_*.jpg' '#2_#1.jpg'
ABCD_20181102.jpg -> 20181102_ABCD.jpg
DEDE_2_20181030.jpg -> 2_20181030_DEDE.jpg
( -n
올바른 작업을 수행하고 있다고 확신하면 제거하십시오).