여러 개의 png 이미지 파일이 포함된 폴더가 있습니다. 끝에서 일부 정보를 제거하려면 파일 이름을 잘라야 합니다.
예를 들어
some file-170227-222746.png
some other file-170228-222742.png
another file-170226-222743.png
.png 확장자를 유지하면서 - 이후의 모든 항목을 제거하고 다음과 같이 마무리해야 합니다.
some file.png
some other file.png
another file.png
모든 파일은 png 이미지 파일이므로 원본 파일을 보관할 필요가 없습니다.
나는 이것을 시도했고 효과가 있었지만 .png 확장자를 제거하여 잘못된 일을 했습니다.
for file in *.png; do
mv -- "$file" "$(file%%.png"
done
위의 mv 명령을 수정하여 필요한 작업을 수행할 수 있습니까? 다른 접근 방식을 사용해야 합니까?
감사해요
답변1
귀하의 접근 방식이 올바른 방향으로 진행되고 있으며 약간의 정확성이 필요합니다. 다음을 수행할 수 있습니다.
for file in ./*.png; do mv "$file" "${file%%-*}.png"; done
답변2
Perl 스크립트에 액세스할 수 있는 경우 rename
다음을 사용할 수도 있습니다.
rename -n 's/(.*).{14}(\.png)/$1$2/' *
삭제를 테스트한 후 -n
실제로 파일 이름을 바꿉니다.
노트
-n
실제로 아무것도 하지 않고 변경될 내용을 인쇄합니다.s/old/new
old
사용. . . 교체new
(.*)
나중에 사용할 수 있도록 이 위치의 모든 문자를 저장하세요..{14}
정확히 14자(\.png)
구하다.png
$1$2
첫 번째 저장된 패턴과 두 번째 저장된 패턴을 인쇄합니다.
답변3
모두의 도움에 감사드립니다.
내 최선의 해결책은 다음과 같습니다.
for file in ./*.png; do
mv "$file" "${file%%-17*}.png"; done
주-17. 이렇게 하면 파일에 다듬어야 할 영역 앞에 초기 대시가 있을 때 너무 많이 잘리는 문제를 방지할 수 있습니다.
예를 들어
some file-name-170227-222746.png
다음과 같이 정리됩니다.
some file-name.png
바꾸다:
some file.png