bash 스크립트에서 재귀적으로 찾아야 합니다. 어디에서나 bash 스크립트를 호출할 수 있으므로 절대 경로를 사용해야 합니다. 때로는 다음과 같이 절대 경로가 매우 길어지고 출력이 지루해질 수 있습니다.
#!/usr/bin/env bash
find /long/absolute/path -type f | sort
그래서 나는 이렇게 했습니다:
#!/usr/bin/env bash
find /long/absolute/path -type f | xargs -L 1 -I @ echo $(basename @) | sort
그러나 이것은 기본 이름을 제공하지 않습니다. 내가 어디서 잘못되었는지 알아낼 수 있나요?
답변1
당신은 두 가지 면에서 실수를 저질렀습니다.
반 임의적인
find
파일 이름을 전달하고 있습니다.둘파이프라인 - 으로xargs
, 다음으로sort
. 가능하면-print0
null 종료를 사용find
하거나 그 안에 작업을 삽입하세요-exec
.Maureen Lawns가 보여주듯이.만약에파일 이름에 의 문자가 포함되어 있지 않으면 명령 대체를 사용하여 echo를
$IFS
요청하고 있기 때문에 명령은 계속 실패합니다xargs
. 명령 대체는basename
출력에 대한 기본 이름을 요청하기 때문에@
존재하지 않을 수 있습니다. 더 가까운 것은 다음과 같습니다.find /long/absolute/path -type f | xargs -L 1 -I @ basename @ | sort
...이렇게 하면 xargs
파일 이름을 에 인수로 삽입할 수 있습니다 basename
.
답변2
이것은 나에게 효과적입니다.
find /some/long/path/ -type f -exec basename {} \;| sort