ls, xargs 및 zcat을 조합하면 파일 이름 접미사가 중복됩니까?

ls, xargs 및 zcat을 조합하면 파일 이름 접미사가 중복됩니까?

부인 성명: 예, 스크립트에서 파일을 찾는 것은 ls좋지 않지만 find수정된 날짜별로 정렬되지는 않습니다.

다음 을 사용하면 모든 것이 괜찮 ls습니다 xargs.echo

$ ls -t1 ssl-access*.gz | xargs -n 1 echo
ssl-access.log.2.gz
ssl-access.log.3.gz
ssl-access.log.4.gz
[...]

echo로 변경 zcat:

$ ls -t1 ssl-access*.gz | xargs -n 1 zcat
gzip: ssl-access.log.2.gz.gz: No such file or directory
gzip: ssl-access.log.3.gz.gz: No such file or directory
gzip: ssl-access.log.4.gz.gz: No such file or directory
[...]

파일 접미사가 중복됩니까? ! 여기서 무슨 일이 일어나고 있는 걸까요?


고쳐 쓰다:

운영체제는 데비안 5이다.

zcat쉘 스크립트입니다 /bin/zcat.

#!/bin/sh
PATH=${GZIP_BINDIR-'/bin'}:$PATH
exec gzip -cd "$@"

답변1

내 시스템에서 문제가 색상 ls로 인해 발생했다는 것을 알았습니다. 내 .bash_profile에는 다음이 있습니다.

alias ls="ls --color"

결과를 stat에 보내서 찾았더니 편리한 내용이 인쇄되었습니다.

$ ls local4.notice-201207* | xargs -n1 -P4 -I{} stat {}
stat: cannot stat `\033[0mlocal4.notice-20120711.gz\033[0m': No such file or directory

빈 색상 코드를 보세요! zcat은 혼란스러워서 파일을 찾기 위해 .gz 접미사를 추가하려고 합니다. 문제는 ls를 color=auto로 변경하여 쉽게 해결할 수 있습니다. 이렇게 하면 STDOUT이 터미널 대신 다른 프로세스에 붙어 있을 때 색상 출력이 비활성화됩니다.

alias ls="ls --color=auto"

행운을 빌어요!

답변2

zcat이 압축 파일에 사용되고 gzcat가 gzip 압축 파일에 사용되는 운영 체제를 사용 중일 수 있습니다. 이 경우 다음이 작동합니다.

   ls -t ssl-access*.gz | xargs -n 1 gzcat

편집하다:

저는 Solaris에서 유사하지만 동일하지는 않은 동작을 재현했습니다.

$ ls -t1 *.gz | xargs -n 1 zcat          
c.gz.Z: No such file or directory
b.gz.Z: No such file or directory
a.gz.Z: No such file or directory

Debian 기반 배포판(Ubuntu)에서는 문제를 재현할 수 없습니다.

어쨌든, 이것은 작동할 수 있습니다:

cat $(ls -t ssl-access*.gz) | zcat

또는 동등하게:

zcat <(cat $(ls -t ssl-access*.gz))

아니면 이 간단한 방법으로 불필요한 고양이를 피할 수 있습니다.

zcat $(ls -t ssl-access*.gz)

이들 중 어느 것도 공백이 포함된 파일 이름과 같은 이상한 파일 이름을 처리하지 않습니다.

관련 정보