파일이 있습니다
..
00016_0912RP10R6_RampMotorway9_0912RP10R6_13.646852_100.687103.jpg
00017_0912RP10R6_RampMotorway9_0912RP10R6_13.646956_100.686897.jpg
00018_0912RP10R6_RampMotorway9_0912RP10R6_13.647067_100.686684.jpg
...
나는 갖고 싶다
00016.jpg
00017.jpg
00018.jpg
하위 폴더를 반복하고 이름을 바꾸는 가장 좋은 Linux 명령은 무엇입니까?
사용 find
:
find . -type f -name '*_*.jpg' -exec sh -c '
for pathname do
newname=${pathname##*/}
newname="${pathname%/*}/${newname%%_*}.jpg"
printf "Would move %s to %s\n" "$pathname" "$newname"
# mv -i "$pathname" "$newname"
done' sh {} +
이것은 주어진 패턴과 이름이 일치하는 현재 디렉토리 안이나 아래의 모든 일반 파일의 경로 이름을 찾습니다. 이러한 경로 이름의 배치에 대해 주어진 경로 이름을 반복하고 파일 이름을 바꾸는 짧은 쉘 스크립트가 실행됩니다 (실제 이름 바꾸기는 안전을 위해 주석 처리됨).
같은 경로 이름이 주어지면 ./a/b/c/foo0_some_other_bits.jpg
쉘 스크립트는 ./a/b/c/foo0.jpg
먼저 디렉토리 foo0_some_other_bits.jpg
를 삭제 (생성 ) 한 다음 첫 _
문자 뒤의 모든 항목을 삭제 하고 디렉토리를 다시 추가하여이를로 변환합니다. 경로 이름의 디렉토리 비트는 하나 또는 여러 _
문자 를 포함하는 경우를 대비하여 삭제 및 교체됩니다 . 이는 표준 매개 변수 확장을 사용하여 수행됩니다.
에서 globstar
쉘 옵션 사용 bash
:
shopt -s globstar # use "set -o globstar" in ksh93, or remove completely in zsh
for pathname in ./**/*.jpg; do
[ -f "$pathname" ] || continue
newname=${pathname##*/}
newname="${pathname%/*}/${newname%%_*}.jpg"
printf "Would move %s to %s\n" "$pathname" "$newname"
# mv -i "$pathname" "$newname"
done
이것은 find
숨겨진 이름을 찾을 수 없다는 유일한 차이점을 제외하고는 위의 명령 과 정확히 동일 합니다 (추가 shopt -s dotglob
).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다