"ls" 명령에서 폴더 접두사를 제거할 수 있습니까?

"ls" 명령에서 폴더 접두사를 제거할 수 있습니까?

나는 bash 스크립트를 사용하고 있으며 모든 파일 목록을 얻고 싶습니다(모든 jar 파일을 가정). 명령을 실행 ls -1 lib/*.jar하고 출력을 얻습니다.

lib/mylib_1.jar
lib/mylib_2.jar
...

다음 출력을 생성하는 옵션이 있습니까?

mylib_1.jar
mylib_2.jar
...

cd lib루프에 있고 루프 내에서 수행하려는 작업을 수행하려면 상위 폴더에 있어야 하기 때문에 이전 만들기는 옵션이 아닙니다.

정보를 찾기 위해 입력을 시도했지만 man ls해결책을 찾지 못했습니다.

ls다른 명령을 사용하는 솔루션은 내 명령에 파이프할 수 있거나 자급자족할 수 있는 한 괜찮습니다.

답변1

바꾸다ls를 구문 분석하다을 사용해야 합니다 find. 그런 다음 basename각 파일에 대해 다음 작업을 수행하여 선행 디렉터리를 제거 할 수도 있습니다 .

find lib/ -name '*.jar' -exec basename {} \;

답변2

GNU를 사용하면 모든 파일을 실행할 find필요가 없으며 basename훨씬 빠릅니다(특히 파일이 많은 경우).

find lib -name '*.jar' -printf '%P\n'

답변3

(cd lib && echo *.jar)파일 이름에 공백이나 특수 문자가 없다고 가정하면 어떨까요? 상위 스크립트는 디렉토리를 변경하지 않습니다.

답변4

find가는 방법일 수도 있지만, 만약 당신이정말lib/(당신은) 에서 제거 하고 싶지 않습니다 . ls -1다음을 사용할 수 있습니다 .sed

$ ls -1 lib/*.jar | sed 's#^lib/##'
mylib_1.jar
mylib_2.jar

관련 정보