循環將特定檔案貼到不同目錄中

循環將特定檔案貼到不同目錄中

我的一些目錄包含類似名稱的文件,例如(*Sample_name*.base.coverage.txt)。我想將所有 *base.coverage.txt 檔案貼在一起。我寫了一些東西,但不太正確,因為我認為我實際上沒有將它們貼在一起。

cd /g/bo/vir/analysis
find -type d  |
while read dir; do
if [ -f $dir/*.base.coverage.txt ]; then
    paste  $dir/*.base.coverage.txt >> paste_all_l30.p90.base.cov.norm

fi
done

我也在考慮一種不同的循環方法,但我不確定如何將目錄列表放入數組中。

for x in $dir; do cat /$x/*.base.coverage.txt;done > paste_all_l30.p90.base.cov.norm

有什麼幫助嗎?謝謝

答案1

嘗試這個:

find . -type f -name '*.base.coverage.txt' \
  | xargs paste > paste_all_l30.p90.base.cov.norm

只要文件不是太多,這就可以工作。如果有很多文件那麼:

touch paste_all_l30.p90.base.cov.norm
for file in `find . -type f -name '*.base.coverage.txt'`; do
  paste paste_all_l30.p90.base.cov.norm $file > tmp
  mv tmp paste_all_l30.p90.base.cov.norm
done

答案2

嘗試這個:

find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;

答案3

遞歸存取多個目錄最簡單的方法是編寫一個簡短的 python 腳本,並使用該os.path.walk函數遞歸存取巢狀目錄。對於附加,您可以shutil.copyfileobj在循環中使用,使用正規表示式檢查檔案名稱。

相關內容