IT story

리눅스`find`로 파일 이름 만 얻는 방법?

hot-time 2020. 4. 10. 08:22
반응형

리눅스`find`로 파일 이름 만 얻는 방법?


디렉토리의 모든 파일에 find를 사용하고 있으므로 경로 목록을 얻습니다. 그러나 파일 이름 만 필요합니다. 즉 나는 얻고 ./dir1/dir2/file.txt싶다file.txt


GNU에서는 find다음 -printf과 같은 매개 변수를 사용할 수 있습니다 .

find /dir1 -type f -printf "%f\n"

find에 -printf 옵션이 없으면 basename을 사용할 수도 있습니다.

find ./dir1 -type f -exec basename {} \;

다음 -execdir과 같이 현재 파일을 자동으로 보유하는 다음 사용하십시오 {}.

find . -type f -execdir echo '{}' ';'

$PWD대신 사용할 수도 있습니다 .(일부 시스템에서는 전면에 추가 점이 생성되지 않음).

여전히 추가 점이 있으면 다음을 실행할 수 있습니다.

find . -type f -execdir basename '{}' ';'

-execdir utility [argument ...] ;

-execdir주는 동일 -exec유틸리티는 디렉토리에서 실행됩니다 것을 제외하고 주 현재 파일을 보유 .

사용하는 경우 +대신 ;다음 {}유틸리티를 호출 할 때마다 가능한 한 많은 경로 이름으로 대체됩니다. 즉, 모든 파일 이름을 한 줄에 인쇄합니다.


GNU find를 사용하는 경우

find . -type f -printf "%f\n"

또는 Ruby (1.9+)와 같은 프로그래밍 언어를 사용할 수 있습니다

$ ruby -e 'Dir["**/*"].each{|x| puts File.basename(x)}'

bash (최소 4) 솔루션을 좋아한다면

shopt -s globstar
for file in **; do echo ${file##*/}; done

파일 이름에 대해서만 일부 작업을 실행하려면 사용하기 basename가 어려울 수 있습니다.

예를 들면 다음과 같습니다.

find ~/clang+llvm-3.3/bin/ -type f -exec echo basename {} \; 

basename 만 에코 /my/found/path합니다. 파일 이름을 실행하려면 원하는 것이 아닙니다.

그러나 xargs출력 할 수 있습니다 . 예를 들어 다른 디렉토리의 이름을 기반으로 디렉토리의 파일을 종료하려면 다음을 수행하십시오.

cd dirIwantToRMin;
find ~/clang+llvm-3.3/bin/ -type f -exec basename {} \; | xargs rm

Mac (BSD find)에서는 다음을 사용하십시오.

find /dir1 -type f -exec basename {} \;

makandracards 페이지에서 최신 파일 이름을 제공하는 솔루션을 찾았습니다.

ls -1tr * | tail -1

(감사 Arne Hartherz에 간다)

나는 그것을 위해 사용했다 cp:

cp $(ls -1tr * | tail -1) /tmp/

참고 URL : https://stackoverflow.com/questions/5456120/how-to-only-get-file-name-with-linux-find

반응형