쉘 스크립팅 기술을 향상시키고 싶습니다. 내가 하고 싶은 일은 특정 폴더의 모든 파일을 다른 대상 폴더에 복사한 다음 연결하여 파일에 저장하는 것입니다.
아래는 내 간단한 코드입니다.
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"