명령줄은 디렉터리의 모든 파일 이름을 검색합니다. 없는 파일 이름.sh
출력 예:
$>./file.sh -e
답변1
find . -name \*.sh | sed 's/\.sh$//'
또는
find . -name \*.sh -print0 | xargs -0 basename -a -s .sh "{}" \;
답변2
배시 사용:
shopt -s globstar
for f in **/*.sh; do printf '%s\n' "${f%*.sh}"; done
답변3
find . -type f -name '*.sh' \
-exec sh -c 'for n; do basename "$n" .sh; done' sh {} +
아니면 find
다음을 아는 사람 과 함께 -execdir
:
find . -type f -name '*.sh' \
-execdir sh -c 'echo "${1%.sh}"' sh {} \;
(발견된 각 파일에 대해 한 번 호출되므로 약간 덜 효율적입니다 sh -c
.)
즉, 현재 디렉토리에서 모든 이름을 찾습니다 .sh
. 이러한 이름(경로 포함)은 하위 쉘로 전달되며, 하위 쉘은 찾은 이름을 반복하여 basename
각 이름을 호출하여 경로 및 이름 확장자를 제거합니다.
전체 경로에서 기본 이름을 확인하여 "필터"라고 부르거나 지정된 파일 이름 이름 접미사가 있는 파일이 아닌 디렉터리를 제외하지 않는 한 실제로 아무것도 필터링하지 않기 때문에 "필터"라고 부르지 않습니다. .
필터는 일반적으로 한쪽 끝에서 데이터를 읽고 이를 변환한 다음 다른 쪽 끝에서 무언가를 내보냅니다(다른 변환에 입력될 수도 있음).