내 하드 드라이브가 Linux Mint에 마운트되지 않아 문제를 해결하려면 Windows로 가서 chkdsk /f e:
.chkdsk를 실행해야 문제가 해결되었지만 모든 파일의 이름을 특수 문자로 바꾸고 파일을 디렉터리로 옮겼습니다 found.000
. 이제 이전처럼 파일을 이동하고 이름을 바꿔야 합니다. 특수 문자가 포함된 파일 이름을 바꾸는 명령을 가끔 실행하면 이런 일이 다시 발생하는 것을 방지할 수 있습니다.
재귀적으로 하고 싶어요파일 및 디렉터리 이름 바꾸기현재 디렉토리에서. 이것개행 문자교체해야한다공간을 위해, 이것수치 < > : " \ | ? *
~해야 한다삭제됨또는 예약되지 않은 유사한 문자로 바꾸는 것이 더 좋습니다.공간존재하다시작과 끝파일 이름은 다음과 같아야 합니다.삭제됨. 이것은 예이다내가 원하는 건:
rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')
이게 뭐야?아니면 더 나은:
rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')
~에 따르면이 답변다음과 같아야 합니다.
LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +
..Trash-1000
명령이 나에게 제공하기 때문에 해당 디렉토리를 무시해야 합니다.입출력 오류명령이 작동을 멈췄습니다. 해당 디렉터리에 이름을 바꿀 수 있는 파일이 있는 경우 이러한 오류를 처리하는 스크립트가 있으면 완벽할 것입니다.
..Trash-1000
다음과 같이 디렉토리를 정리하라는 지시를 받았습니다.이 답변. 나도 좀 살펴봤어이것. 하지만 이것은 작동하지 않습니다.
LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +
그리고 파일 이름의 시작과 끝 부분에 있는 공백은 여전히 제거되지 않았습니다.
내 질문을 질문으로 다시 작성해야 했습니다.이름 바꾸기를 사용하여 파일 이름(디렉토리 제외)의 유효하지 않은 문자를 반복적으로 바꾸는 스크립트나에게는 대답이 없습니다.
답변1
입력/출력 오류가 발생하는 디렉터리를 정리하는 대신 다른 모든 디렉터리에 대해 명령을 한 번 실행할 수 있습니다.
다음은 Windows 예약 문자를 제거하는 데 사용하는 명령입니다.
find . -execdir rename -n 's/[\r\n]+/ /g;
s/:/./g;
s/[\|]/-/g;
s/[<>"?*]//g;
s/[ \f\t\v]+$//g;
s/^[ \f\t\v]+//g' {} \;
개행 문자를 공백으로 변환한 다음 변경 사항으로 바꾼 다음 제거 하고 :
파일 이름 끝의 공백을 제거한 다음 시작 부분의 공백에도 동일한 작업을 수행합니다..
\|
-
<>"?*