파싱 ls
하거나 파이프 하는 것은 안전하지 않습니다 find
[ 1 , 2 ]
구문 분석하는 것이 안전 (및 파이프)의 출력되지 않습니다 ls
또는 find
이 가능한에서 찾을 주로하기 때문에, 파일 이름 은 AS가 아닌 보통의 문자 줄 바꿈 의 탭 ... 여기 순수한 쉘주기가 작동합니다 [ cuonglm ] . 옵션과 함께 파이프되지 않은 명령
조차도 작동합니다.find
-exec
find ./*.png -exec basename {} .png \;
업데이트 / 메모 : find .
숨겨진 파일을 검색하거나 숨겨지지 않은 파일 find ./*.png
만 가져 오는 데 사용할 수 있습니다. 으로 find *.png -exec ...
당신이 경우에 문제가있을 수 있습니다 그것은라는 이름의 파일이 존재 .png
발견이 옵션으로 그것을 얻을 때문입니다. 로 -maxdepth 0
명명 된 디렉토리 Dir_01.png
에서 또는 find ./*.png -prune -exec ...
maxdepth가 허용되지 않는 경우 (Stéphane 덕분에) 내림차순 을 피하기 위해 추가 할 수 있습니다 . 해당 디렉토리를 나열하지 않으려면 옵션을 추가해야합니다 -type f
(다른 유형의 비정규 파일도 제외 함). man
사용 가능한 모든 옵션에 대한보다 완전한 파노라마를 살펴보고 더 나은 이식성을 위해 POSIX 호환시기를 확인하십시오.
더 많은 단어
예를 들어 문서에서 제목을 복사하고 파일 이름에 붙여 넣으면 하나 이상의 줄 바꿈이 파일 이름 자체에서 끝날 수 있습니다. 제목에 줄 바꿈 직전에 사용해야 할 키조차 포함 할 수 없을 정도로 운이 좋지 않을 수도 있습니다.
The new art of working on .png
files and other formats.
테스트하려면 명령을 사용하여 이와 같은 파일 이름을 만들 수 있습니다
touch "A file with two lines"$'\n'"and This is the second.png"
touch "The new art of working on .png"$'\n'"files and other formats.png"
인쇄 할 수없는 문자 대신 단순 /bin/ls *png
출력?
A file with two lines?and This is the second.png
The new art of working on .png?files and other formats.png
당신은 어느 것 모든 경우에 출력 파이프 의 ls
또는 find
다음 명령을 본 라인은 새로운에서 오는 경우 이해하는 힌트가 없습니다 파일 이름 이나는 다음 경우 개행 선행에 문자 파일 이름을 . 에이불쾌한 참 이름,하지만 여전히 법적 하나.
[ params -Expansion] 쉘이있는 쉘 사이클 은 [ cuonglm ], [ Anthon1 ]${parameter%word}
과 함께 printf
또는 echo
작동 합니다.
for f in *.png; do printf "%s\n" "${f%.png}" ; done
Shell Parameter Expansion의 매뉴얼 페이지에서 [ 3 ]
$ {parameter % word}
$ {parameter %% word}
... 확장 결과는 일치 패턴이 가장 짧은 ( '%'경우) 또는 일치하는 가장 긴 일치 패턴 ( '%%')이있는 매개 변수의 값입니다.
.
있습니다. 협약에 파일 이름을 말한다하더라도.png
말에, 나는 PNG 파일이 이름이없는 이유 이유가 없다foo.zip
거나my.picture.20160518
아니면 그냥mypic
.