Linux- 파일 이름의 공백을 교체합니다
문제
폴더에 여러 파일이 있으며 모든 파일 이름의 모든 공간 문자를 밑줄로 바꾸고 싶습니다. 이것을 어떻게 달성 할 수 있습니까?
해결책
이렇게해야합니다.
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
다른 팁
Perl 스타일의 regexes를 취하는 '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
.
교체 작업을 적용하려면 어떻게해야합니까? 재귀 적으로? 어떻게 하시겠습니까?
글쎄, 나는 방금 대답을 직접 찾았다. 가장 우아한 솔루션은 없습니다 (조건을 준수하지 않는 파일의 이름을 바꾸려고합니다). 그러나 작동합니다. (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
Bash를 사용하는 경우 :
for file in *; do mv "$file" ${file// /_}; done
변수 인용 :
for file in *; do echo mv "'$file'" "${file// /_}"; done
실제 이름 바꾸기를 위해 "echo"를 제거하십시오.
모든 파일이 .txt의 모든 파일이라고 가정하면 이와 같은 것을 시도하십시오.
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
문자열 (케이스의 공간 문자)을 다른 문자열로 바꾸는 가장 쉬운 방법 Linux
사용 중입니다 sed
. 다음과 같이 할 수 있습니다
sed -i 's/\s/_/g' *
도움이 되었기를 바랍니다.
다음은 다른 해결책입니다.
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
- awk를 사용하여 파일 이름 주위에 따옴표를 추가합니다.
- SED를 사용하여 공간을 밑줄로 대체합니다. 원래 이름을 인용문 (awk)으로 인쇄합니다. 그런 다음 대체 이름입니다
- Xargs는 한 번에 2 줄을 가져 와서 MV로 전달합니다.
나는 당신의 대답이 있다고 믿습니다 파일 이름의 공백을 밑줄로 교체하십시오.
모든 파일의 이름을 a로 바꿉니다 .py
확장 사용,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
샘플 출력,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
제휴하지 않습니다 StackOverflow