파이프 입력을 ls 명령으로 보내려면 어떻게해야합니까?


20

내가 다음과 같은 것을 입력하면 :

find . -name *foo* | ls -lah

ls입력이없는 것처럼 일반 명령 과 동일한 결과를 반환합니다 .

하나:

ls -lah $( find . -name *foo* )

find명령이 결과를 가질 때만 잘 작동 합니다.

배관이 가능 ls합니까?


각 찾기 결과 내의 파일을 ls할지, 찾기 결과를 직접 ls할지 지정해야합니다. 후자라면 u / Dennis의 답변이 정답입니다.
rmutalik

답변:


27

명령 -exec과 함께 사용할 수 있습니다 find.

find . -name '*foo*' -exec ls -lah {} \;

솔루션 주셔서 감사합니다. 파이프는 없지만 우아한 방법입니다. 'find'로 결과를 찾지 못하면 아무것도 표시되지 않습니다 (사실 좋은 것).
Lasall

7
약간 더 나은 방법 :find . -name '*foo*' -exec ls -lah {} +
jlliagre

20
find . -name *foo* | xargs -r ls -lah

작동합니다.


1
그 해결책에 감사드립니다. 그러나 공백을 어떻게 처리 할 수 ​​있습니까?
Lasall

2
@Lasall 선호하는 방법은 find -exec +(또는 -exec \;) 를 사용하는 것입니다 . 옵션 xargs과 함께 사용하는 것만 안전합니다. -0xargs, 항목을 NULL 바이트 (\ 0)로 구분 하기 위해 파이프하는 모든 명령을 지시 해야합니다. find당신 과 함께 할 수 있습니다 -print0. xargs의 -0 및 find의 -print0은 표준은 아니지만 -exec는 이식성이 문제인 경우 -exec와 함께 find를 사용하십시오.
geirha


3

이것을 사용하십시오 : (ls는 공백이 있거나 이상한 문자가있는 파일 이름으로 정렬 할 수 있습니다)

find . -name *foo* -print0 | xargs -0 ls -lah

"-print0"은 파일 이름과 같은 파일 이름 file foo 1에서 find널 이 출력 됨을 의미합니다 . xargs에 대한 "-0"인수는 이러한 종류의 입력을 예상하므로 공백이있는 파일 이름이 ls명령에 올바르게 파이프 됩니다.

xargs건설은보다 나은 몇 가지 방법에 find etc -exec ls {} \;파일 이름의 모두로 전송받을 때문에 ls당신이 (사용 타임 스탬프에 의해 그들 모두를 정렬 할 그렇다면, 한 번에 ls이 작품 등) 뭔가 :

find . -iname *pdf -print0 | xargs -0 ls -ltr

NetBSD 시스템에서, "-printx"도 옵션입니다 (이것은 나에게 유용한 주장 인 것 같습니다. 그러나 우리는 xargs -0을 가지고 있고 괜찮습니다) :

find . -name *foo* -printx | xargs ls -lah (우분투 아님)


이것은 이것을 시도하는 사람들을 위해 실제로 ls의 정렬 기능을 사용할 수 있다는 속임수였습니다.
Harry Mustoe-Playfair
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.