특정 파일 이름을 가진 파일을 반환하는 데 사용하고 싶습니다 find
. 이 경우 _
.
사용할 수 있다는 것을 배웠습니다
find . ! '(' -name '_*' ')'
그러나 이전 경로 이름 없이 파일 이름을 반환하고 싶습니다. basename
bash에서 cmd를 사용하여 이를 수행할 수 있는 방법이 있습니까 ?
또한 이 작업을 수행할 수 있는 이와 같은 다른 명령에도 열려 있습니다 ls
.
답변1
예, -를 사용하여 작업 basename
에 매개변수로 전달할 수 있습니다 .-exec
find . ! -name '_*' -exec basename {} \;
(연산자 우선순위 문제가 없으므로 그룹화 대괄호는 필요하지 않습니다.)
또는 GNU가 있는 경우 find
해당 -printf
작업은 일반 파일 이름에 대한 형식 지정자를 제공합니다.
%f File's name with any leading directories removed (only the last element).
그래서
find . ! -name '_*' -printf '%f\n'
답변2
올바른 형식은 다음과 같으며 원하는 경우파일 이름인쇄하려면 find
및shell (POSIX sh/bash/Korn/zsh) parameter substitution expansion
.:
find /path/to -type f -name "[!_]*" -exec sh -c 'printf "%s\n" "${1##*/}"' _ {} \;
아니면 당신이 선두에 나서는 것이 괜찮다면 우리가 find
조합을 할 수도 있습니다.-execdir
./
find /path/to -type f -name "[!_]*" -execdir printf '%s\n' {} +
당신도 그것을 사용할 수 있습니다 find -type f ! -name "_*" ...
.
답변3
find . -type f ! -name "_*" -printf "%f\n"
with는 POSIX에 대한 GNU 확장 printf
입니다 .%f
find