如何复制特定文件夹中的所有文件,然后将它们连接成一个文件?

如何复制特定文件夹中的所有文件,然后将它们连接成一个文件?

我想提高我的 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文件?如果没有,则不需要findfor file in "$path"/*.txt就足够了。

事实上,如果所有文件都在一个目录中,则不需要循环:

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

请注意,大括号中的变量${var}与带引号的变量不同"$var"

相关内容