我目前正在从我做的随机备份中恢复一些日志文件。我有 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
,但对于您提到的文件数量来说,这应该不是问题。