2012-06-04 102 views
4

我需要編寫一個腳本來讀取目錄中的所有文件名,然後根據文件名(例如,如果它包含R1或R2),它將連接所有文件名在名稱中包含例如R1。從Bash中的目錄讀取文件名

任何人都可以給我一些提示如何做到這一點?

我能夠做的唯一的事情就是:

#!/bin/bash 

FILES="path to the files" 

for f in $FILES 
do 
    cat $f 
done 

,這隻能說明我這個變量文件是一個目錄不是它的文件。

回答

10

要能解決問題的最小變化:

dir="path to the files" 
for f in "$dir"/*; do 
    cat "$f" 
done 

要完成你形容爲你想要的最終目標:

shopt -s nullglob 
dir="path to the files" 
substrings=(R1 R2) 
for substring in "${substrings[@]}"; do 
    cat /dev/null "$dir"/*"$substring"* >"${substring}.out" 
done 

注意cat可以採取多個文件在一個調用 - - 事實上,如果你不這樣做,你通常不需要使用貓。

0

簡單的黑客:

LS -al R1 | awk'{print $ 9}'> outputfilenameR1

ls -al R2 | awk'{print $ 9}'> outputfilenameR2

+1

如果您的文件名包含空格,'print $ 9'將只會選出第一部分。請參閱[爲什麼不應該解析'ls']的輸出(http://mywiki.wooledge.org/ParsingLs)中的其他警告。 –