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' {} \;
줄 바꿈을 공백으로 바꾼 다음 를 대체하고 :
로 .
변경한 다음 \|
제거 -
하고 <>"?*
파일 이름 끝의 공백을 삭제한 다음 시작 부분의 공백에 대해 동일한 작업을 수행합니다.