MS Windows에서 생성된 이름에 공백이 포함된 파일(mp3, wav, txt, doc)이 많이 있습니다. 예를 들어The file of whoever.doc
공백을 밑줄이나 점으로 바꾸어 한꺼번에 이름을 바꾸고 싶습니다.
답변1
쉘은 이를 쉽게 수행할 수 있습니다(이것은 운영자가 ksh93, zsh, bash, mksh, yash 또는 (일부 버전) busybox sh를 사용한다고 가정합니다 ${var//pattern/replacement}
):
for file in *.doc *.mp3 *.wav *.txt
do
mv -- "$file" "${file// /_}"
done
*.doc
이름을 바꾸려는 파일과 일치하도록 ... glob을 변경하십시오 .
현재 파일 이름에 공백이 포함된 현재 디렉터리의 모든 파일 이름을 바꾸려면:
for file in *' '*
do
mv -- "$file" "${file// /_}"
done
"clobber" 검사를 추가하는 것을 고려할 수도 있습니다.
for file in *' '*
do
if [ -e "${file// /_}" ]
then
printf >&2 '%s\n' "Warning, skipping $file as the renamed version already exists"
continue
fi
mv -- "$file" "${file// /_}"
done
또는 파일을 덮어쓰기 전에 사용자에게 메시지를 표시하는 옵션을 mv
사용 하세요.-i
답변2
앞서 언급한 프로그램 외에도디톡스관심이 있을 수도 있습니다. 이런 일을 하도록 특별히 설계되었으며 공간 외에도 많은 일을 처리할 수 있습니다. 파일 이름에 움라우트, 괄호 또는 기타 이상한 내용이 없는 경우 다음은 디렉토리 트리 상단에서 실행하면 원하는 작업을 정확하게 수행해야 합니다.
detox -r .
이렇게 하면 디렉터리 이름도 수정되므로 Users
Windows 시스템의 디렉터리에서 실행하지 마세요. 그렇지 않으면 문제가 발생할 수 있습니다. Windows에서는 사용자 디렉터리의 특정 폴더에 특정 이름이 있어야 하며 이렇게 하면 해당 폴더가 변경됩니다. ) 폴더 이름).
답변3
예를 들어 다음과 같이 사용할 수 있습니다 sed
.
mv -i "${original_file}" "$(echo "${original_file}" | sed 's/ /_/g')"
여기에 예가 있습니다.
이름에 공백이 포함된 파일을 만듭니다.
touch "/tmp/test file with spaces"
파일 이름을 바꿉니다.
mv -i \
"/tmp/test file with spaces" \
"$(echo "/tmp/test file with spaces" | sed 's/ /_/g')"
파일의 새 이름은 다음과 같습니다.
test_file_with_spaces
다음과 같이 동일한 작업을 수행할 수 있습니다 tr
.
mv -i "${original_file}" "$(echo "${original_file}" | tr ' ' _)"
또는 Bash 하위 문자열 대체를 사용하십시오.
mv -i "${original_file}" "${original_file// /_}"
또는 rename
다음 명령을 사용하십시오.
rename "s/ /_/g" "${original_file}"
답변4
Austin Hemmelgarn이 위에서 정답을 제시했습니다. 다음을 사용하세요.
detox -r .
명령 미리보기를 실행하기 전에 detox
다음 옵션을 사용하여 변경하십시오.-n
detox -n -r .
detox
시작점으로 홈 디렉터리에서 명령을 실행하고 숨겨진 파일과 디렉터리를 모두 제외하고 timeshift
디렉터리와 같은 특정 디렉터리를 제외하려면 다음 형식을 사용합니다.
find ~ -path '*/\.*' -prune -o -path */timeshift/* -prune -o -exec detox -n {} \;
위 명령을 실제로 실행하려면 제거하십시오.-n