나는디렉토리 구조
DIR
SUBDIR1
11-01-11.txt
13-05-23.txt
SUBDIR2
12-05-56.txt
13-04-02.txt
15-04-06.txt
이를 달성하기 위해 bash 스크립트를 작성하고 싶습니다원하는 출력
DIR
SUBDIR1
sub_dir1_merged.txt
SUBDIR2
sub_dir2_merged.txt
원래 디렉터리 구조를 유지하고, 각 파일을 sub_dirname_merged.txt 파일로 병합하고, 원본 파일을 모두 삭제하고 싶습니다.
나는 다음을 시도했다암호
for f in */
do
cat $f/*.txt > "$f"/$f_merged.txt
rm $f/*.txt
done
이것은 제대로 작동하지 않습니다.
답변1
스크립트:
for f in */*.txt; do
cat "$f" >> "$(dirname "$f")/$(dirname "$f")_merged.txt"
rm "$f"
done
하위 디렉터리의 txt 파일 반복:
for f in */*.txt; do
$(dirname "$f")
파일 이름과 파일 저장 경로 모두에 사용되는 txt가 있는 폴더의 이름을 반환합니다.
rm "$f"
파일을 삭제합니다. 명령을 사용하려는 경우 rm
스크립트를 실행하기 전에 스크립트 결과가 예상한 것과 같은지 확인하십시오.
답변2
find
로고와 함께 사용 하실 수 있습니다 . -execdir
다음과 같이 간단해집니다.
find DIR/ -type f -execdir bash -c 'cat -- $1 >> "${PWD##*/}_merged.txt"' _ {} \;
위 코드 줄을 약간 수정하여 원본 파일을 삭제했습니다.
find DIR/ -type f -execdir bash -c 'for f; do cat -- $f >> "${PWD##*/}_merged.txt"; done; [[ $f != *${PWD##*/}* ]] && rm -v "$f"' _ {} \;