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