다른 질문이 있습니다.
세 개의 다른 디렉토리가 있지만 내부에는 동일한 이름을 가진 동일한 파일이 있습니다. 예를 들어:
카탈로그 1:
dir1/file1.txt
dir1/file2.txt
dir1/file3.txt
카탈로그 2:
dir2/file1.txt
dir2/file2.txt
dir2/file3.txt
디렉토리 3:
dir3/file1.txt
dir3/file2.txt
dir3/file3.txt
같은 이름의 파일을 붙여넣고 싶습니다. 좋아요:
dir1/file1.txt
+ dir2/file1.txt
+ dir3/file1.txt
=file1.txt
dir1/file2.txt
+ dir2/file2.txt
+ dir3/file2.txt
=file2.txt
dir1/file3.txt
+ dir2/file3.txt
+ dir3/file3.txt
=file3.txt
어떻게 해야 합니까?
답변1
파일 내용을 연결하려면 다음을 수행하십시오.
cat dir*/file1 > file1
cat dir*/file2 > file2
cat dir*/file3 > file3
와일드카드를 사용하면 cat 명령이 패턴과 일치하는 모든 디렉터리/파일의 내용을 읽게 되므로 결과 파일에 기록된 세 디렉터리 모두에서 동일한 이름을 가진 파일의 내용을 얻게 됩니다.
답변2
디렉터리 이름만 알고 파일 이름은 모른다고 가정하면 디렉터리 중 하나의 파일 이름을 배열에 저장한 다음 요소를 반복하여 디렉터리 이름을 제거하고 결과 파일 이름을 각 디렉터리에 붙여넣을 수 있습니다.
files=(dir3/*)
for p in "${files[@]}"; do
f=${p#*/}; paste dir1/"$f" dir2/"$f" dir3/"$f" > "$f"; done
glob을 사용하여 쉘이 확장하도록 하면 더 짧게 만들 수 있습니다(디렉토리 이름은 사전식으로 사용됩니다).
for p in "${files[@]}"; do f=${p#*/}; paste dir*/"$f" > "$f"; done