我想提高我的 shell 脚本技能。我想要做的是将特定文件夹中的所有文件复制到其他目标文件夹中,然后通过连接它们将它们保存到一个文件中。
下面是我的简单代码。
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"