3

我想连接名称不包含“_BASE_”的文件。我以为它会在某个地方...

ls | grep -v _BASE_ | cat > all.txt

猫部分是我做错的。有人可以给我一些想法吗?

4

3 回答 3

4

试试这个

ls | grep -v _BASE_ | xargs cat > all.txt
于 2011-12-16T08:21:44.110 回答
2

ls您可以使用 using选项忽略某些文件,--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可以是shellescape

例如,如果--quoting-style=shellSome File 将打印为“Some File”并将被解释为一个文件。

另一个问题是输出文件可能与其中一个lsed 文件相同。我们也需要忽略它。

所以答案是:

outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}
于 2011-12-16T08:22:31.337 回答
1

如果你还想从子目录中获取文件,`find' 是你的朋友:

find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+

它搜索当前目录及其子目录中的文件,它只找到文件 ( -type f),忽略与通配符模式匹配的文件*_BASE_*,忽略all.txt并以与将要执行cat的方式相同的方式执行xargs

于 2011-12-16T08:35:54.430 回答