移动并可能重命名

移动并可能重命名

是否可以构造一个命令,将文件移动到另一个目录,如果相同的文件已存在,则生成一些不在目录中某些文件名称中的随机字符串,并将该文件重命名为该随机字符串?

我知道该mv -i命令,因此我手动执行此操作,并将其中包含的文件重命名为其他名称。

谢谢

答案1

mv -b file destination/

应该可以解决问题。

mv --backup=TYPE

将像类型所说的那样,它是以下之一:

none, off       never make backups (even if --backup is given)
numbered, t     make numbered backups
existing, nil   numbered if numbered backups exist, simple otherwise
simple, never   always make simple backups

答案2

没有标准或通用的单步命令。这是一个两步过程,依赖于非标准但常见的mktemp

tmp=$(TMPDIR=$(dirname -- "$destination") mktemp -t)
mv -- "$source" "$tmp"
echo n | mv -i -- "$tmp" "$destination"

答案3

$ mv -fv --backup=simple file1.txt archive/ 

‘file1.txt’ -> ‘archive/file1.txt’ (backup: ‘archive/file1.txt~’)

$ ll archive/
-rw-r--r-- 1 root root         8 Dec 10 11:06 file1.txt
-rw-r--r-- 1 root root        10 Dec 10 11:05 file1.txt~

上面的 mv 会将 file1.txt 移动到 archive/ 目录,并将现有 archive/file1.txt 重命名为 file1.txt~,以防文件名冲突。如果再次运行它,它只会保留一个备份文件“archive/file1.txt~”。

相关内容