여러 파일 이름 포함 하위 폴더의 이름을 바꾸는 방법은 무엇입니까?

여러 파일 이름 포함 하위 폴더의 이름을 바꾸는 방법은 무엇입니까?

예를 들어 다음 파일이 있습니다.

./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png

파일 이름을 다음과 같이 바꾸는 한 줄 명령이나 스크립트가 있습니까?

./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]

답변1

노력하다:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
  • find .

    현재 디렉토리로 파일 검색이 시작됩니다.

  • -type f

    이렇게 하면 검색이 일반 파일로 제한됩니다.

  • -name '*.png'

    이렇게 하면 이름이 로 끝나는 파일로 검색이 제한됩니다 .png.

  • -execdir bash -c '...' Move {} \;

    이는 발견된 파일의 이름에 $0할당 Move및 할당된 작은따옴표로 묶인 명령을 실행합니다 . $1우리의 경우 작은따옴표로 묶인 명령은 다음과 같습니다.

  • mv "$1" "${1%.png}@2x.png"

    그러면 파일 이름이 @2x.png. 이 구문은 파일 이름 끝에서 ${1%.png}를 제거합니다 . .png따라서 파일 이름 끝에 ${1%.png}@2x.png있는 를 ..png@2x.png

다음 파일이 있는 디렉터리부터 시작하겠습니다.

$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png

이제 다음 명령을 실행해 보겠습니다.

$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;

명령이 실행되면 이제 다음 파일이 생성됩니다.

$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]

관련 정보