내 디렉터리 중 일부에는 유사한 이름을 가진 파일이 포함되어 있습니다(예: *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
루프에서 사용할 수 있으며 정규식을 사용하여 파일 이름을 확인하세요.