이런 문자가 잘못된 파일이 있습니다
009_-_�%86ndringshåndtering.html
Æ
파일 이름에 문제 가있는 곳입니다.
유효하지 않은 문자를 모두 제거하는 방법이 있습니까?
아니면 tr
어떻게 든 사용할 수 있습니까?
echo "009_-_�%86ndringshåndtering.html" | tr ???
이런 문자가 잘못된 파일이 있습니다
009_-_�%86ndringshåndtering.html
Æ
파일 이름에 문제 가있는 곳입니다.
유효하지 않은 문자를 모두 제거하는 방법이 있습니까?
아니면 tr
어떻게 든 사용할 수 있습니까?
echo "009_-_�%86ndringshåndtering.html" | tr ???
답변:
한 가지 방법은 sed를 사용하는 것입니다.
mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')
교체 file
물론, 파일 이름으로. 문자, 숫자, 마침표, 밑줄 또는 대시가 아닌 것을 밑줄로 바꿉니다. 원하는대로 유지하기 위해 문자를 추가 또는 제거하거나 대체 문자를 다른 것으로 변경하거나 전혀 변경할 수 없습니다.
f='file'; mv 'file' ${f//[^A-Za-z0-9._-]/_}
나는 당신이 리눅스 박스에 있고 파일은 Windows 박스에 있다고 가정합니다. Linux는 파일 이름의 문자 인코딩으로 UTF-8을 사용하는 반면 Windows는 다른 것을 사용합니다. 이것이 문제의 원인이라고 생각합니다.
"convmv"를 사용합니다. 파일 이름을 한 문자 인코딩에서 다른 문자 인코딩으로 변환 할 수있는 도구입니다. 서유럽의 경우 다음 중 하나가 정상적으로 작동합니다.
convmv -r -f windows-1252 -t UTF-8 .
convmv -r -f ISO-8859-1 -t UTF-8 .
convmv -r -f cp-850 -t UTF-8 .
데비안 기반 Linux에 설치해야 할 경우 다음을 실행하여 설치할 수 있습니다.
sudo apt-get install convmv
매번 나를 위해 작동하며 원래 파일 이름을 복구합니다.
출처 : LeaseWebLabs
Save the current file in Word 97-2004 format\sco.workflow
Mac에서 (Microsoft Office를 통해) 생성 된 디렉토리 가 있으며 위의 인코딩은 영향을 미치지 않습니다.
--notest
실제로 파일 이름을 바꾸는 옵션으로 다시 실행하라는 메시지가 표시됩니다 .
파일 시스템을 통과하고 모든 파일을 수정하고 싶다고 가정합니까?
내가 할 방법은 다음과 같습니다
find /path/to/files -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/_/g) {
print("Renaming $_ to $new\n"); rename($_, $new);
}'
ASCII가 아닌 문자가 포함 된 모든 파일을 찾아 해당 문자를 밑줄 ( _
)로 바꿉니다 . 그러나 새 이름을 가진 파일이 이미 있으면 덮어 씁니다. 이러한 경우를 확인하기 위해 스크립트를 수정할 수 있지만 간단하게 유지하기 위해 스크립트를 넣지 않았습니다.
https://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters 에서 답변을 따르면 다음을 사용할 수 있습니다.
rename 's/[^\x00-\x7F]//g' *
여기서 *
이름을 바꾸려는 파일과 일치합니다. 여러 디렉토리에서 수행하려면 다음과 같이하십시오.
find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;
-n 인수를 사용하여 rename
드라이 런을 수행하고 변경하지 않고 변경 내용을 확인할 수 있습니다.
깨진 USB 스틱에서 복구 된 깨진 파일 이름의 일부 일본어 파일이 있었고 위의 솔루션이 작동하지 않았습니다.
해독 패키지를 권장합니다.
해독 유틸리티는 작업하기 쉽도록 파일 이름을 바꿉니다. 그것은 공간과 다른 성가심을 제거합니다. 또한 8 비트 ASCII로 인코딩 된 Latin-1 (ISO 8859-1) 문자, UTF-8로 인코딩 된 유니 코드 문자 및 CGI 이스케이프 문자를 변환하거나 정리합니다.
사용법 예 :
detox -r -v /path/to/your/files
-r 서브 디렉토리로 재귀 -v 이름이 바뀐 파일에 대해 자세하게 설명하십시오. -n 드라이 런에 사용할 수 있습니다 (변경된 내용 만 표시).
detox
합니다. 바퀴를 재발 명하기 전에 모든 사람이 살펴볼 것을 촉구합니다 . 매뉴얼 페이지를 보면 유연성으로 인해 여기에서 제안 된 다른 모든 솔루션을 다루는 것을 볼 수 있습니다.
的节奏啊
보이지만 해당 문자는 유효한 파일 이름입니다.
이 셸 스크립트는 Linux / Windows와 FAT / NTFS / exFAT간에 파일을 이식 할 수 있도록 디렉토리를 반복적으로 삭제합니다. 제어 문자 /:*?"<>\|
와 일부 예약 된 Windows 이름을 제거합니다 COM0
.
sanitize() {
shopt -s extglob;
filename=$(basename "$1")
directory=$(dirname "$1")
filename_clean=$(echo "$filename" | sed -e 's/[\\/:\*\?"<>\|\x01-\x1F\x7F]//g' -e 's/^\(nul\|prn\|con\|lpt[0-9]\|com[0-9]\|aux\)\(\.\|$\)//i' -e 's/^\.*$//' -e 's/^$/NONAME/')
if (test "$filename" != "$filename_clean")
then
mv -v "$1" "$directory/$filename_clean"
fi
}
export -f sanitize
sanitize_dir() {
find "$1" -depth -exec bash -c 'sanitize "$0"' {} \;
}
sanitize_dir '/path/to/somewhere'
리눅스는 이론적으로 덜 제한적인 ( /
그리고 \0
엄격 파일 이름에 금지)하지만 실제로는 여러 문자가 bash는 명령을 방해 (같은 *
...) 그래서 그들은 또한 파일 이름에 피해야한다.
파일 이름 제한에 대한 훌륭한 소스 :
포함 된 줄 바꿈, 멀티 바이트 문자, 공백, 선행 대시, 백 슬래시 및 공백을 처리하려면보다 강력한 무언가가 필요합니다.
https://superuser.com/a/858671/365691
rnf-bash-rename-script에 관심이 있다면 스크립트를 code.google.com에 올려 놓으십시오.
이 단일 라이너를 사용하여 자막 파일에서 유효하지 않은 문자를 제거합니다.
for f in *.srt; do nf=$(echo "$f" |sed -e 's/[^A-Za-z0-9.]/./g' |sed 's/\.\.\././g' |sed 's/\.\././g'); test "$f" != "$nf" && mv "$f" "$nf" && echo "$nf"; done