是否可以构造一个命令,将文件移动到另一个目录,如果相同的文件已存在,则生成一些不在目录中某些文件名称中的随机字符串,并将该文件重命名为该随机字符串?
我知道该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~”。