예를 들어 다음 파일이 있습니다.
./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]