xargs를 사용할 때 해당 파일 또는 디렉토리 오류가 없습니다.

xargs를 사용할 때 해당 파일 또는 디렉토리 오류가 없습니다.

.mkv사용하려는 확장자를 가진 파일이 있습니다 du -h. 일부 파일 whitespace앞에 문자가 있습니다.

ranveer@ranveer:~$ ls *.mkv
Arrow.S01E02.720p.HDTV.X264-DIMENSION_(1)  [SHYAMPAREEK.IN].mkv
mymediafirefreefreak.com_The.Mentalist.S05E04.480p.HDTV.X264-mRS.mkv
SHYAMPAREEK.IN-The.Vampire.Diaries.S04E02.720p.HDTV.X264-DIMENSION_(1).mkv
Supernatural.S08E03.720p.HDTV.X264-DIMENSION_(1)SHYAMPAREEK.IN].mkv
  [WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv
 [WWW.SHYAMPAREEK.IN].Castle.2009.S05E03.480p.HDTV.x264-mSD.mkv
ranveer@ranveer:~$ 

xargs이제 모든 파일에 적용을 사용 du -h하지만 앞에 문자가 있는 파일의 경우 오류가 whitespace발생합니다 .No such file or directory

ranveer@ranveer:~$ ls *.mkv | xargs -I f du -h "f" | awk '{print $1}'
du: cannot access `[WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv': No such file or directory
du: cannot access `[WWW.SHYAMPAREEK.IN].Castle.2009.S05E03.480p.HDTV.x264-mSD.mkv': No such file or directory
186M
151M
185M
186M
ranveer@ranveer:~$ 

하지만 이 파일들을 개별적으로 적용하면 du -h제대로 작동합니다.

ranveer@ranveer:~$ du -h "  [WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv"
151M      [WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv
ranveer@ranveer:~$ 

그렇다면 왜 xargs & du -h.

답변1

사용법이 xargs때때로 혼란스러울 수 있습니다. 안정적으로 사용하려면 입력을 분리해야 합니다 \0.

ls | tr \\n \\0 | xargs -0 stat

개행 문자를 s로 변경하려면 \0(최근에 가지고 있는 경우 xargs)

ls | xargs -d \\n stat

답변2

이 경우 실제로 xargs가 필요하지 않습니다.du -h -- *.mkv | awk '{print $1}'

어쨌든 문제를 해결해 보세요.ls *.mkv | xargs du -h | awk '{print $1}'

여기에 이미지 설명을 입력하세요.

나를 위해 작동합니다, bash4.2

답변3

당신의 명령은 약간 Rube Goldberg와 비슷합니다. 파일 목록을 가져옵니다 *.mkv. 이러한 파일을 나열합니다(인쇄할 수 없는 일부 문자를 대략적인 표현으로 대체할 수 있음). 목록을 구문 분석합니다(목록 생성 방법과 완전히 일치하지 않는 일부 구문 분석 규칙 사용). 구문 분석된 각 요소를 du명령(여러 인수를 허용할 수 있음)에 전달합니다.

ls명령은 와일드카드 문자를 확장하지 않고 대신 쉘이 와일드카드 문자를 확장합니다.출력을 구문 분석하지 않습니다.ls, 거의 필요하지 않으며 종종 무언가를 깨뜨립니다.

이 명령의 입력 형식은 xargs다른 명령에서 생성된 형식과 일치하지 않습니다. 응, 이상해. 를 사용하면 -I들여 xargs쓰기가 무시되므로 초기 공백이 있는 파일 이름이 손상됩니다. xargs이 옵션과 함께 사용 -0하거나 입력에 혼동되는 문자가 포함되어 있지 않다는 것을 알고 있는 경우를 제외하고는 사용 하지 마십시오 .

쓰다

du -h *.mkv | awk '{print $1}'

답변4

내 생각에는 "-0"이 필요하다고 생각합니다.

https://man7.org/linux/man-pages/man1/xargs.1.html

Unix 파일 이름에는 공백과 개행 문자가 포함될 수 있기 때문에 이러한 기본 동작은 종종 문제가 됩니다. xargs는 공백 및/또는 개행 문자가 포함된 파일 이름을 잘못 처리합니다. 이러한 경우에는 이러한 문제를 방지하기 위해 -0 옵션을 사용하는 것이 좋습니다. 이 옵션을 사용할 때 xargs에 대한 입력을 생성하는 프로그램이 null 문자를 구분 기호로 사용하는지 확인해야 합니다. 예를 들어, 프로그램이 GNU find인 경우 -print0 옵션이 이를 수행합니다.

관련 정보