将多个文件从多个文件夹移动到一个位置(不覆盖)的工具或命令

将多个文件从多个文件夹移动到一个位置(不覆盖)的工具或命令

我目前正在从我做的随机备份中恢复一些日志文件。我有 70 多个文件夹中的 48 个文件。

我怎样才能将这 48 个文件移动到一个文件夹中,而不覆盖同名文件?我用 进行了检查,其中大多数文件具有相同的名称,但大小不同fdupes

答案1

在终端中输入此命令(Ctrl+ Alt+T打开它):

find $LOG_DIR -type f | xargs -I {} sh -c 'base=$(basename "$1"); name=${base%.*}; ext=${base##*.}; mv "$1" "$OUTPUT_DIR/$name`date +%N`.$ext"' -- {}

基本上,这将在 $LOG_DIR 中找到所有文件(您必须将其替换为 70 个文件夹的父文件夹的位置),提取不带路径的名称(基名),将名称和扩展名分开,然后将它们移动到 $OUTPUT_PATH(替换为您希望它们去往的位置)并附加此时的纳秒数(数据+%N) 到名称,因此不会覆盖。

附言:我从那里得到了一点帮助:堆栈溢出

答案2

首先find按照上面的指示找到要移动的文件:

find /dir/with/scattered/logs -type f

这只会打印文件列表。如果您对此感到满意,只需使用cp备份选项,这将“备份每个现有的目标文件”。既然您说名称并不那么重要,那应该没问题。备份文件的名称后面会附加一个“~”。请参阅man cp以更好地控制此功能。

find /dir/with/scattered/logs -type f -exec cp -b {} /destination/directory \;

这将逐个复制文件,效率不如使用xargs,但对于您提到的文件数量来说,这应该不是问题。

相关内容