특정 조건이 충족되면 파일을 반복적으로 이동합니다.

특정 조건이 충족되면 파일을 반복적으로 이동합니다.

다음과 같은 디렉토리 트리가 있습니다.

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 globstarbash에서)을 설정하고 추가로 명령을 사용하여 경로 구성 요소를 가져오거나 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

관련 정보