Shell

ls、xargs 和 zcat 組合導致文件名後綴重複?

  • August 28, 2012

免責聲明:是的,在腳本中查找文件ls很糟糕,但find無法按修改日期排序。

使用ls和一切都很好xargsecho

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

更改echozcat

$ 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
[...]

文件後綴重複?!這裡發生了什麼?


更新:

作業系統是 Debian 5。

zcat是一個 shell 腳本/bin/zcat

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

我在我的系統上發現了由顏色 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"

祝你好運!

引用自:https://unix.stackexchange.com/questions/23055