저는 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)
이렇게 인용하면 파일 이름의 흰색 문자가 무시됩니다.