특정 파일을 다른 디렉토리에 붙여넣는 루프

특정 파일을 다른 디렉토리에 붙여넣는 루프

비슷한 이름의 파일(예: *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루프 내에서 정규식으로 파일 이름을 확인하는 데 사용할 수 있습니다 .

관련 정보