파일 이름의 문자열을 바꿔 여러 파일의 이름을 바꾸는 방법은 무엇입니까? 문자열에 "#"이 포함되어 있습니다.

파일 이름의 문자열을 바꿔 여러 파일의 이름을 바꾸는 방법은 무엇입니까? 문자열에 "#"이 포함되어 있습니다.

https://serverfault.com/questions/70939/how-to-replace-a-text-string-in-multiple-files-in-linux

https://serverfault.com/questions/228733/how-to-rename-multiple-files-by-replacing-word-in-file-name

https://serverfault.com/questions/212153/replace-string-in-files-with-certain-file-extension

https://serverfault.com/questions/33158/searching-a-number-of-files-for-a-string-in-linux

이 기사는 모두 내 질문에 대한 답변입니다. 그러나 그 중 어느 것도 나에게 적합하지 않습니다. 교체하려는 문자열에 #이 포함되어 있기 때문인 것 같습니다. 이 문제를 해결하는 특별한 방법이 있나요?

사이트 마이그레이션 중에 내 이미지 파일이 #U00a9로 바뀌었습니다. 이것들은 다음과 같습니다:

Lucky-#U00a9NBC-80x60.jpg
Lucky-#U00a9NBC-125x125.jpg
Lucky-#U00a9NBC-150x150.jpg
Lucky-#U00a9NBC-250x250.jpg
Lucky-#U00a9NBC-282x232.jpg
Lucky-#U00a9NBC-300x150.jpg
Lucky-#U00a9NBC-300x200.jpg
Lucky-#U00a9NBC-300x250.jpg
Lucky-#U00a9NBC-360x240.jpg
Lucky-#U00a9NBC-400x250.jpg
Lucky-#U00a9NBC-430x270.jpg
Lucky-#U00a9NBC-480x240.jpg
Lucky-#U00a9NBC-600x240.jpg
Lucky-#U00a9NBC-600x250.jpg
Lucky-#U00a9NBC.jpg

나는 이것을 다음과 같이 바꾸고 싶습니다 :

Lucky-safeNBC-80x60.jpg
Lucky-safeNBC-125x125.jpg
Lucky-safeNBC-150x150.jpg
Lucky-safeNBC-250x250.jpg
Lucky-safeNBC-282x232.jpg
Lucky-safeNBC-300x150.jpg
Lucky-safeNBC-300x200.jpg
Lucky-safeNBC-300x250.jpg
Lucky-safeNBC-360x240.jpg
Lucky-safeNBC-400x250.jpg
Lucky-safeNBC-430x270.jpg
Lucky-safeNBC-480x240.jpg
Lucky-safeNBC-600x240.jpg
Lucky-safeNBC-600x250.jpg
Lucky-safeNBC.jpg

고쳐 쓰다:

이러한 예제는 모두 "LU00a9ucky"로 시작하지만 이름이 다른 이미지가 많이 있습니다. 방금 문자열의 "#U00a9" 부분을 "safe"로 바꿨습니다.

답변1

현재 디렉토리의 파일 이름을 (비재귀적으로) 바꾸려면 (Perl- #)을 사용할 수 있습니다.somethingelse이름을 바꿔라유용:

rename  's/#/somethingelse/' *

이와 같은 문자는 -이스케이프되어야 합니다 \.

귀하의 경우에는 다음을 사용해야합니다.

rename 's/#U00a9/safe/g' *

특정 파일 선택에서만 작업하려는 경우(예: only ) *.jpg해당 선택과 일치하도록 최종 입력을 조정하십시오.

rename 's/#U00a9/safe/g' *.jpg

실제로 파일 이름을 변경하기 전에 테스트를 수행하려면 다음 -n플래그를 사용하십시오.

demo/> ls                               
Lucky-#U00a9NBC-125x125.jpg  
Lucky-#U00a9NBC-150x150.jpg 

demo/> rename -n 's/#U00a9/safe/g' *.jpg
rename(Lucky-#U00a9NBC-125x125.jpg, Lucky-safeNBC-125x125.jpg)
rename(Lucky-#U00a9NBC-150x150.jpg, Lucky-safeNBC-150x150.jpg)

OS X의 경우 다음 명령을 사용하여 이름 바꾸기를 설치할 수 있습니다.집에서 만든: brew install rename.

답변2

이것은 어렵지 않습니다. 이름 앞에 백슬래시(\)를 추가하여 이름에서 옥토소프(#)를 이스케이프 처리했는지 확인하세요.

find . -type f -name 'Lucky-*' | while read FILE ; do
    newfile="$(echo ${FILE} |sed -e 's/\\#U00a9/safe/')" ;
    mv "${FILE}" "${newfile}" ;
done 

답변3

파일 목록을 찾아 키워드를 바꿉니다. 아래는 예시입니다

find . -name '*jpg' -exec bash -c ' mv $0 ${0/\#U00a9NBC/safeNBC}' {} \;

답변4

sed에서 사용하는 방법을 모르지만 bash 쉘에서 사용해 볼 수 있습니다.

for f in Lucky-#U00a9NBC-*.jpg; do mv -v "$f" "${f/#U00a9/safe}"; done;

설명하다:

  1. glob과 일치하는 모든 파일 이름을 반복합니다(Lucky-#U00a9NBC-*.jpg).
  2. 이동 명령(mv)을 사용하여 파일 이름 바꾸기
  3. 기본 bash 매개변수 대체 ${var/Pattern/Replacement}를 사용하여 새 이름을 만듭니다("${f/#U00a9/safe}").

매개변수 대체에 대한 추가 정보(제 생각에는 활용도가 매우 낮습니다):http://www.tldp.org/LDP/abs/html/parameter-substitution.html

관련 정보