여러 디렉터리에서 파일 복사 [닫기]

여러 디렉터리에서 파일 복사 [닫기]

10개의 다른 디렉터리에서 파일을 복사하여 다른 디렉터리에 추가하고 싶습니다.

답변1

이를 수행하는 방법에는 여러 가지가 있습니다. 가장 간단한 것 중 하나는 다음과 같습니다.

for d in dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir8 dir9 dir10 ; do
    cat "$d/filename" >> /path/to/other/dir/filename
done

또는 약간 더 나은 방법은 다음과 같습니다.

#! /bin/bash

outdir='/path/to/otherdir'
filename='filename.txt'

sourcedirs="dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir7 dir9 dir10"

for d in $sourcedirs ; do
    cat "$d/$filename" >> "$outdir/$filename"
done

이 버전의 좋은 점은 $sourcedirs단지 변수를 변경하기만 하면 원하는 수의 디렉터리에서 작동하도록 할 수 있다는 것입니다. 또한 $sourcedirs수동으로 열거할 필요 없이 다른 명령(예 find /top/level/directory -type d: )으로 생성할 수 있습니다.

예를 들어, 이 버전에서는 최상위 디렉터리를 명령줄의 첫 번째(유일한) 인수로 지정할 수 있습니다. 그런 다음 $sourcedirs해당 최상위 디렉터리의 모든 첫 번째 수준 하위 디렉터리( ) 목록을 생성합니다 .-maxdepth 1

#! /bin/bash

topdir="$1"    

outdir='/path/to/otherdir'
filename='filename.txt'

find "$topdir" -maxdepth 1 -exec cat "{}/$filename" \; >> "$outdir/$filename"

트리의 깊이에 관계없이 특정 파일 이름과 일치하는 디렉토리 트리의 모든 파일 목록을 연결하려면 다음을 수행할 수 있습니다.

#! /bin/bash

topdir="$1"

outdir='/path/to/otherdir'
filename='filename.txt'

find "$topdir" -type f -name "$filename" -exec cat {} + >> "$outdir/$filename"

또는 한 줄로:

find /top/dir -type f -name 'filename.txt' -exec cat {} + \
    >> /path/to/other/dir/filename.txt

관련 정보