특정 폴더의 모든 파일을 복사한 다음 하나의 파일로 연결하려면 어떻게 해야 합니까?

특정 폴더의 모든 파일을 복사한 다음 하나의 파일로 연결하려면 어떻게 해야 합니까?

쉘 스크립팅 기술을 향상시키고 싶습니다. 내가 하고 싶은 일은 특정 폴더의 모든 파일을 다른 대상 폴더에 복사한 다음 연결하여 파일에 저장하는 것입니다.

아래는 내 간단한 코드입니다.

path=/Users/sclee/Dropbox/project/java/projects/WaferPointDraw/src/main/resources/pattern
dest=/Users/sclee/Dropbox/journal/clustering_ieee_semi_2020/data/small_datasets/noise200000other2000
output=large_datast_3.txt

mkdir -p $dest;
echo "$dest directory is created"
for i in `find ${path} -iname '*.txt'`;
do
        cp $i $dest;
done
echo "all the files is copied"

cat ${dest}/* > ${dest}/${output}
echo "created the combined file"

위의 코드로 목표를 달성할 수 있지만 for 루프의 모든 논리를 처리하고 싶습니다. 보시다시피 이 cat명령은 for 루프 외부에서 수행됩니다. for간단한 코드로 루프에서 처리 하고 싶습니다 .

어떤 도움이라도 대단히 감사하겠습니다.

감사해요.

답변1

Oneliner는 다음을 사용합니다 find.

find "$path" -iname '*.txt' -exec cp {} "$dest" \; -exec sh -c "cat {} >> $dest/$output" \;

답변2

내가 올바르게 이해했다면 교체 할 수 있습니다

do
  cp $i $dest;
done

그리고

do
  cat $i>>${dest}/${output};
done

결과를 출력 파일에 추가하세요.

답변3

질문: $path에 txt 파일이 있는데, 모든 txt 파일을 찾기 위해 들어가고 싶은 하위 디렉터리가 있나요? 그렇지 않다면 필요하지 않으며 find그것 for file in "$path"/*.txt으로 충분합니다.

실제로 모든 파일이 하나의 디렉터리에 있으면 루프가 필요하지 않습니다.

cp -t "$dest" "$path"/*.txt
cat "$path"/*.txt > "$dest/$output"

중괄호 안의 변수는 따옴표 안의 ${var}변수와 동일하지 않습니다."$var"

관련 정보