내 ext4 파일 시스템에는 파일 이름에 공백이 있는 파일과 디렉터리가 많이 있습니다.
안전하게 찾아서 이름을 바꾸려면 어떻게 해야 합니까? 나는 bash를 가지고 있고 Ubuntu를 실행하고 있습니다.
발견된 각 파일의 이름을 대화형으로 바꾸는 것이 가능합니까? 즉, 각 파일의 내용 이름을 무엇으로 바꿀 것인지 물어보십시오.
파일 이름을 선택하여 이름을 바꾸려면 어떤 규칙을 사용하시겠습니까?
답변1
이 스크립트는 대상 디렉터리에서 모든 파일을 찾아 공백을 포함하지 않도록 모든 파일의 이름을 바꾸는 새 스크립트를 생성합니다. 그런 다음 스크립트를 실행하기 전에 자유롭게 검토할 수 있습니다.
#!/bin/bash
TARGET=/path/to/files
NEWSCRIPT=${HOME}/rename-spaced-files.sh
OLDIFS="${IFS}"
IFS="\n"
for file in $(find ${TARGET}/ -type f -name "* *"); do
if [[ -f \"${file// /}\" ]]; then
echo "# \"${file// /}\" already exists- come up with a new name for it and uncomment the next line" >> $NEWSCRIPT
echo -n "# " >> $NEWSCRIPT
fi
echo "mv \"${file}\" \"${file// /}\"" >> $NEWSCRIPT
done
답변2
각 디렉토리에 대해 이름 바꾸기를 사용하는 것은 간단합니다.
rename 's/\s/_/g' *
이렇게 하면 디렉터리의 파일 이름에서 모든 공백이 제거되고 "_"로 대체됩니다. "g"를 생략하면 파일 이름의 첫 번째 공백만 대체되므로 해당 부분을 잊지 마십시오. *는 실행되는 디렉터리의 모든 파일을 의미합니다.
rename 's/\s/_/g' /home/you/something/*
디렉토리에 있는 파일 이름의 모든 공백을 대체합니다./home/you/something/
여기에는 많은 디렉토리를 순회하는 것이 포함되지 않지만 이것이 제가 일반적으로 수행하는 작업입니다.
나는 밑줄을 좋아합니다. 이렇게 변경됩니다.
my file with spaces.txt
도착하다
my_file_with_spaces.txt
답변3
공백이 포함된 파일 이름은 Unix 및 해당 파일 시스템에서 완벽하게 허용되지만 이를 쉘 명령이나 변수(예: 스크립트)와 함께 사용할 때는 이러한 이름을 인용할 때 주의해야 합니다. 그렇지 않으면 쉘은 각 단어를 별도의 인수로 명령에 전달합니다.
VAR="existing file with spaces in name"
#This works
ls "${VAR}"
#This results in file(s) not found
ls ${VAR}
이미 제공된 답변 외에도 다음을 사용할 수도 있습니다.mmv
mmv
어쨌든 소스 및 대상 패턴을 인용해야 하므로 이 명령은 이름의 공백에 관계없이 이름이 패턴과 일치하는 여러 파일의 이름을 바꿉니다 .
그리고 뻔뻔하기도 하고내 말을 인용하자면(의도한 말장난은 아니지만 수용됨):
경험 법칙:언제나문자열이 포함된 쉘 변수를 확장할 때 따옴표를 사용하십시오. 공백이 포함되어 있거나 비어 있을 수 있으며, 따옴표가 없으면 전달된 명령이 혼동되는 경우가 많습니다(인수가 너무 많거나 인수가 누락됨).