Shell
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 [...]
文件後綴重複?!這裡發生了什麼?
更新:
作業系統是 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"
祝你好運!