
我的一些目錄包含類似名稱的文件,例如(*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
在循環中使用,使用正規表示式檢查檔案名稱。