나는 노력한다이미지가 아닌 파일만 나열, 가장 최근 500개의 파일만 검색합니다. 그래서 난 달린다
ls -t | head -500 | file | grep -v 'image'
옳지 않습니다. 도움말 메시지가 표시됩니다. 그것을로 바꾸다
ls -t | head -500 | xargs file | grep -v 'image'
이제 원하는 출력이 나올 때도 있지만 파일 이름에 공백(예: 등 )이 포함되어 Plutonian\ Nights\ -\ Sun\ Ra.mp3
있으면 xargs
실행됩니다 file Plutonian
.file Nights
공간을 보는 데 어떻게 도움을 주거나 xargs
내가 성취하려는 일을 성취할 수 있나요?
답변1
를 사용하면 xargs
다음과 같이 수행할 수 있습니다.
find . -type f -print0 | xargs -0 file | grep -v 'image'
그런데 xargs
그게 어제였어요. 오늘도 멋진 아이들이 사용하고 있어요 parallel
. 병렬성을 사용하면 다음과 같습니다.
find . -type f | parallel file | grep -v 'image'
바라보다. -print0 및 -0은 사용되지 않습니다. parallel
정말 스마트한 것 그 자체입니다.
고쳐 쓰다
가장 최근 500개 파일만 나열하려면 다음 명령을 사용하세요.
ls -1t | head -500 | parallel file {} | grep -v image
중요한
병렬 프로그램이 오래되어 위 구문이 작동하지 않는 경우 여기에 있는 지침에 따라 병렬 프로그램의 새 버전을 설치하십시오.http://www.gnu.org/software/parallel/parallel_tutorial.html
답변2
"find" 및 "-print0" 옵션을 사용하고 출력을 "xargs" 및 "-0" 옵션으로 파이프합니다.
나는 이 기술을 알고 사용하지만 @Jens 사용자가 비슷한 질문에 답변한 것을 보았습니다. 여기에서 자세한 내용을 확인할 수 있습니다.
https://stackoverflow.com/questions/16758525/use-xargs-with-filenames-포함-whitespaces
답변3
도움이 될만한 대략적인 두 가지 제안이 있습니다. 하지만 어느 쪽도 그다지 만족스럽지 않으므로 어쩌면 더 나은 것이 나올 수도 있습니다.
먼저 sed를 사용하여 모든 항목에 따옴표를 추가하십시오. 따라서 파일 이름에 따옴표가 있는 경우에만 문제가 발생합니다.
ls -t | head -500 | sed -e 's/\(.*\)/"\1"/' | xargs file | grep -v 'image'
또 다른 방법은 ls를 사용하여 가장 최근의 501을 찾은 다음 find를 사용하여 최신 항목을 얻는 것입니다.
find -newer $(ls -t | head -501 | tail -1) -type f -exec file {} \; | grep -v image
답변4
당신은 시도 할 수 있습니다
printf "%s\0" $(ls -t | head -500) | xargs -0 file | grep -v image
이렇게 하면 xargs가 null로 구분된 파일 이름 인수를 사용하게 됩니다.