2017-02-14 13 views
0

我試圖在一組目錄中找到csv文件的所有實例,並將它們連接成一個csv文件。Bash:找到並連接兩位數的文件名

問題在於目錄是編號的。我只想要以兩位數結尾的目錄。例如,我想要目錄RUN11,RUN12等,但不是RUN1,RUN2。

如果我不關心有兩個數字,我會做到這一點(從here

find $(pwd)/RUN* -name '*csv' |xargs cat > big_cat_file.csv 

我嘗試這樣做:

find $(pwd)/RUN[!0-9]{2} -name '*csv' |xargs cat > big_cat_file.csv 

但它說,沒有這樣的文件或目錄。

如何從名稱爲RUN11,RUN12但不是RUN1,RUN2的目錄中抓取csv文件?

+0

您正在混合通配符和正則表達式。 '[!0-9]'是通配符(RE中的'[^ 0-9]'),而'{2}'是通配符中不可用的正則表達式量詞。 – cdarke

回答

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數。

相關問題