我正在尝试在一组目录中找到csv文件的所有实例,并将它们连接成一个csv文件。
问题是目录已编号。我只想要以两位数结尾的目录。例如,我想要目录RUN11,RUN12等,但不是RUN1,RUN2。
如果我不关心有两位数字,我会这样做(来自here)
userInput
我试过了:
find $(pwd)/RUN* -name '*csv' |xargs cat > big_cat_file.csv
但它没有说这样的文件或目录。
如何从名称如RUN11,RUN12但不是RUN1,RUN2的目录中获取csv文件?
答案 0 :(得分:3)
您正在尝试使用正则表达式语法,您需要使用glob。
您只需要指定范围两次,而不是使用{2}
:
find "$PWD"/RUN[0-9][0-9] -name '*csv' |xargs cat > big_cat_file.csv
(请注意[!0-9]
匹配除数字之外的任何单个字符。)
要容纳可能与*csv
匹配的任何合法文件名,您应使用-exec
主文件而不是xargs
。 (考虑如果文件名包含空格,或者在最坏的情况下,换行符会发生什么。)
find "$PWD"/RUN[0-9][0-9] -name '*csv' -exec cat {} + > big_cat_file.csv
这不仅适用于任何有效的文件名,而且可以最大限度地减少对cat
的调用次数。