유닉스에서 find를 사용하여 이상한 파일/디렉토리 이름 찾기

유닉스에서 find를 사용하여 이상한 파일/디렉토리 이름 찾기

저는 find를 사용하여 디렉토리 경로를 입력하는 스크립트를 작성 중입니다. 이는 스크립트의 일부입니다.

set list = (`find $PATH -type d`)

파일이나 디렉터리 이름의 이름이 지정되지 않을 때까지는 정상적으로 작동합니다. 예를 들면 다음과 같습니다.

fi@@lename&& or −filename or :−,?!drectoryanem!-

이러한 특수 문자를 처리할 수 없어서 찾기 스크립트를 다음과 같이 변경했습니다.

set list = ("`find $PATH -type d`")

그러나 다음 스크립트에서 목록의 경로를 사용하려는 경우 이들 중 어느 것도 작동하지 않습니다.

foreach i ($list:q)
   foreach file (`find "$i" -maxdepth 1 -type f`)
   ....
   end
end

이러한 특수 파일 이름을 처리할 수 없으므로 find와 같은 오류가 많이 발생합니다.

−."!filenda no such filename or directory

답변1

특이한 파일 이름을 관리하려면 주위에 따옴표(")를 넣어야 합니다. 그러나 find가장 효율적인 방법으로 사용하고 있지는 않은 것 같습니다. 그 핵심 부분 중 하나는 find특이한 파일 이름으로 작업을 수행한다는 것입니다. 파일 작업이 선택되었습니다.

    find . -maxdepth 1 -type f -exec ls -l {} \;

-exec 이후의 모든 것은 발견된 각 파일에서 실행되고 {}파일 이름으로 대체됩니다.

또한 FreeBSD 3.2를 사용하면 몇 가지 이상한 점이 있습니다. FreeBSD 3.2는 1999년 5월에 출시되었습니다.

답변2

나는 그것을 해결했다

다음과 같아야 합니다.

set subor = ("`find "'"$i"'" -type f -maxdepth 1`")

이제 파일 이름의 모든 내용을 무시합니다.

그리고:

foreach j ($subor:q)

이렇게 인용하면 파일 이름의 흰색 문자가 무시됩니다.

관련 정보