폴더에 많은 파일이 있고 모든 파일 이름의 모든 공백 문자를 밑줄로 바꾸고 싶습니다. 이것을 어떻게 할 수 있습니까?
답변
이렇게해야합니다.
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
답변
Perl 스타일의 정규식을 사용하는 ‘rename’명령을 사용하는 것을 선호합니다.
rename "s/ /_/g" *
-n 플래그를 사용하여 테스트 실행을 수행 할 수 있습니다.
rename -n "s/ /_/g" *
답변
사용 sh …
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
방아쇠를 당기기 전에 이것을 시도하려면 mv
로 변경 하십시오 echo mv
.
답변
bash를 사용하는 경우 :
for file in *; do mv "$file" ${file// /_}; done
답변
대체 작업을 재귀 적 으로 적용하려면 어떻게해야 합니까? 어떻게 하시겠습니까?
글쎄, 방금 답을 찾았습니다. 가장 우아한 솔루션은 아니지만 (조건을 준수하지 않는 파일의 이름도 변경하려고 시도) 작동합니다. (BTW, 제 경우에는 밑줄이 아닌 ‘% 20’으로 파일 이름을 변경해야했습니다)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
답변
모든 파일이 .txt라고 가정하여 다음과 같이 시도하십시오.
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
답변
다음은 또 다른 해결책입니다.
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
- awk를 사용하여 파일 이름 주위에 따옴표를 추가합니다.
- sed를 사용하여 공백을 밑줄로 바꿉니다. 따옴표로 원래 이름을 인쇄합니다 (from awk); 다음 대체 이름
- xargs는 한 번에 두 줄을 가져 와서 mv에 전달합니다.
