다음과 같은 디렉토리 트리가 있습니다.
records/13/2014.12.16/00/05.mpg
records/13/2014.12.16/00/15.mpg
records/13/2014.12.16/01/05.mpg
records/13/2014.12.16/02/15.mpg
records/15/2014.12.14/05/25.mpg
etc.
*5.mpg
이름에 포함된 모든 파일의 이름을 바꿔야 합니다 *0.mpg
. 예를 들면 다음과 같습니다.
mv records/13/2014.12.16/00/05.mpg records/13/2014.12.16/00/00.mpg
mv records/13/2014.12.16/00/15.mpg records/13/2014.12.16/00/10.mpg
mv records/15/2014.12.14/05/25.mpg records/15/2014.12.14/05/20.mpg
etc.
이를 위해서는 bash 스크립트를 작성해야 한다는 것을 알고 있습니다. 아쉽게도 제가 잘 못해서 도움을 요청하게 되었습니다. 모든 디렉토리(재귀 부분)로 이동하여 이름에 *5.mpg
.
답변1
모든 파일을 반복 *.5mpg
하고 매개변수 확장의 도움을 받아 파일 이름을 변경하세요.
for file in *5.mpg; do mv -- "$file" "${file%5.mpg}"0.mpg; done
다른 디렉터리에 대해 이 작업을 수행하려면 globstar 옵션( shopt -s globstar
bash에서)을 설정하고 추가로 명령을 사용하여 경로 구성 요소를 가져오거나 dirname
매개 변수 확장을 다시 사용하세요.
답변2
또 다른 해결책:
find records -type f -iname '*.mpg' | xargs rename 5.mpg 0.mpg
이름을 바꾸려는 모든 파일은 *5.mpg로 끝나므로 이 find
+ rename
조합이 적합합니다.
답변3
실제로 스크립트를 직접 작성해 보았습니다. 이것은 작동하는 것 같습니다:
#!/bin/bash
find . -type f -iname "*5.mpg" -print0 | while IFS= read -r -d $'\0' line; do
new=${line//5.mpg}
zero="0.mpg"
buffer=$new$zero
new=$buffer
mv $line $new
echo "Moving $line"
done