我想连接名称不包含“_BASE_”的文件。我以为它会在...的某个方面。
ls | grep -v _BASE_ | cat > all.txt
猫部分是我不对的。有人可以给我一些想法吗?
答案 0 :(得分:4)
试试这个
ls | grep -v _BASE_ | xargs cat > all.txt
答案 1 :(得分:2)
您可以使用ls
选项忽略--ignore
的某些文件,然后将其合并到一个文件中。
ls --ignore="*_BASE_*" | xargs cat > all.txt
您也可以在没有xargs
的情况下执行此操作:
cat $( ls --ignore="*_BASE_*" ) > all.txt
<强> UPD 强>:
Dale Hagglund注意到,像“Some File”这样的文件名将显示为两个文件名,“Some”和“File”。为避免这种情况,您可以使用--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}
答案 2 :(得分:1)
如果你想从子目录获取文件,`find'是你的朋友:
find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+
它搜索当前目录及其子目录中的文件,它只查找文件(-type f
),忽略与通配符模式*_BASE_*
匹配的文件,忽略all.txt
,并执行{{1与cat
的方式相同。