특정 파일을 다른 디렉토리에 반복 붙여넣기

특정 파일을 다른 디렉토리에 반복 붙여넣기

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

관련 정보