我想連接名稱不包含「_BASE_」的文件。我認爲這將是沿線的某處...unix:如何連接grep中匹配的文件
ls | grep -v _BASE_ | cat > all.txt
貓的部分是我沒有得到正確的。任何人都可以給我一些關於這個的想法嗎?
我想連接名稱不包含「_BASE_」的文件。我認爲這將是沿線的某處...unix:如何連接grep中匹配的文件
ls | grep -v _BASE_ | cat > all.txt
貓的部分是我沒有得到正確的。任何人都可以給我一些關於這個的想法嗎?
試試這個
ls | grep -v _BASE_ | xargs cat > all.txt
可以忽略文件的使用--ignore
選項ls
,然後將它們的貓到一個文件中。
ls --ignore="*_BASE_*" | xargs cat > all.txt
你也可以做,沒有xargs
:
cat $(ls --ignore="*_BASE_*") > all.txt
UPD: 戴爾奼glund注意到,類似的文件名 「某些文件」 將顯示爲兩個文件名, 「一些」 和「文件」。爲避免您可以使用--quoting-style=WORD
選項,當WORD
可以是shell
或escape
。
例如,如果--quoting-style=shell
某些文件將打印爲「某些文件」並將被解釋爲一個文件。
另一個問題是輸出文件可能與ls
ed文件中的一個相同。我們也需要忽略它。
所以答案是:
outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}
如果你想也子目錄中的文件,'發現」是你的朋友:
find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+
它會搜索當前目錄及其子目錄中的文件,它只找到文件(-type f
),忽略與通配符模式*_BASE_*
匹配的文件,忽略all.txt
,並以與xargs
相同的方式執行cat
。
如果任何文件名包含空白,這些都不起作用。像「Some File」這樣的文件名在傳遞給cat時會顯示爲兩個文件名「Some」和「File」。 – 2011-12-16 09:21:39
修復答案 – 2011-12-16 11:58:37