패턴과 일치하는 파일 이름 부분을 추출하여 파일 이름을 바꿉니다.

패턴과 일치하는 파일 이름 부분을 추출하여 파일 이름을 바꿉니다.

그러한 파일의 이름을 바꾸는 데 어떤 명령을 사용할 수 있는지 알고 싶습니다.

예를 들어 이전 파일 이름은 다음과 같습니다.

0_predict-1-500.png
0_predict-2-500.png
0_predict-3-500.png
1_predict-1-500.png
1_predict-2-500.png
1_predict-3-500.png
2_predict-1-500.png
...so on...

내가 기대하는 것은 유사한 형식으로 추출한 {filename}_predict-{times}-{rounds}.png다음 다른 패턴(예 {filename}.png-result-{times}.png: .

따라서 위의 파일 이름은 패턴과 일치하도록 변경됩니다.

0.png-result-1.png
0.png-result-2.png
0.png-result-3.png
1.png-result-1.png
1.png-result-2.png
1.png-result-3.png
2.png-result-1.png
...so on...

이와 같은 작업을 수행할 수 있는 Linux 명령/도구를 가진 사람이 있습니까? 나는 이 작업을 수행하기 위해 Python 스크립트를 작성하고 싶지 않습니다.

답변1

나는 방금 GNU/Linux에서 파일 이름을 쉽게 조작할 수 있는 도구가 있다는 것을 발견했습니다.밀리미터파. 이것은 게시된 답변보다 훨씬 쉽습니다.

나는

mmv "*_predict-*-*.png" "#1.png-result-#2.png"

각 부분을 와일드카드 패턴으로 교체하려고 시도하므로 등을 사용하여 해당 #1부분을 재사용할 수 있습니다.#2

답변2

rename 명령을 사용하면 편집할 수 있습니다. 모든 파일이 동일한 디렉토리에 있다고 가정하고 원하는 대로모든 .png 이름 바꾸기문서.:

find -name \*.png -exec sh -c 'x=$( rename -v 's/_predict/.png-result/g' $0 ) ;  rename  's/-500//g' "${x##*\./}" ;' {} \;

파일이 있는 디렉터리에서 이 명령을 실행합니다.

따라서 기본적으로 이름 바꾸기 명령을 두 번 실행합니다. 첫 번째는 삭제 _predict하고 두 번째는 삭제합니다 -500.

x=$( rename -v 's/_predict/.png-result/g' $0 )처음으로 파일 이름을 변경한 후 이 새 이름을 변수에 저장한 x다음 해당 값을 두 번째 수정에 사용하기 때문에 여기서 사용합니다 .

rename 's/-500//g' "${x##*\./}" ;x의 값이 이렇기 때문에 명령어를 사용하면 됩니다 ./0_predict-1-500.png renamed as ./0.png-result-1-500.png. 그래서 저는 이것을 원 0.png-result-1-500.png하고 ${x##*\./}그렇게 할 것입니다.

답변3

또한 시도

$ for FN in *.png; do IFS="_-." read F P T R X <<< "$FN"; echo mv "$FN" "$F.$X-result-$T.$X"; done
mv 0_predict-1-500.png 0.png-result-1.png
mv 0_predict-2-500.png 0.png-result-2.png
mv 0_predict-3-500.png 0.png-result-3.png
mv 1_predict-1-500.png 1.png-result-1.png
mv 1_predict-2-500.png 1.png-result-2.png
mv 1_predict-3-500.png 1.png-result-3.png
mv 2_predict-1-500.png 2.png-result-1.png

echo결과가 만족스러우면 삭제하세요. 대상 파일을 반복하고 read적응 변수의 파일 이름 구성 요소와 "여기에 문자열"을 사용한 IFS다음 구성 요소를 다시 조립하여 명령에 필요한 최종 파일 이름을 형성합니다 mv.

답변4

이름을 바꿔야 하는 파일의 모든 파일을 언급하세요.

awk  '{print "mv -v" " " $1 " " substr($1,1,1)".png-result-"substr($1,11,1)".png"}' filename |sh


I have mentioned -v for verbose mode

This is how it shows output for renaming

awk  '{print "mv -v" " " $1 " " substr($1,1,1)".png-result-"substr($1,11,1)".png"}' filename|sh

`0_predict-1-500.png' -> `0.png-result-1.png'
`0_predict-2-500.png' -> `0.png-result-2.png'
`0_predict-3-500.png' -> `0.png-result-3.png'
`1_predict-1-500.png' -> `1.png-result-1.png'
`1_predict-2-500.png' -> `1.png-result-2.png'
`1_predict-3-500.png' -> `1.png-result-3.png'
`2_predict-1-500.png' -> `2.png-result-1.png'

관련 정보