.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 옵션이 이를 수행합니다.