我在某些服务器上遇到了许多具有相同内容和相同名称的文件。我需要隔离这些文件进行分析,所以我不能删除重复项。操作系统是Linux(centos和ubuntu)。
我枚举文件名和位置,并将它们放入文本文件中。
然后我执行for语句将文件移动到隔离区。
for file in $(cat bad-stuff.txt); do mv $file /quarantine ;done
问题是它们具有相同的文件名,我只需要添加文件名的唯一内容以使其正确保存。我确信它很简单,但我对正则表达式并不擅长。谢谢你的帮助。
答案 0 :(得分:4)
由于您使用的是Linux,因此您可以利用GNU mv的--backup
。
while read -r file
do
mv --backup=numbered "$file" "/quarantine"
done < "bad-stuff.txt"
以下是一个展示其工作原理的示例:
$ cat bad-stuff.txt
./c/foo
./d/foo
./a/foo
./b/foo
$ while read -r file; do mv --backup=numbered "$file" "./quarantine"; done < "bad-stuff.txt"
$ ls quarantine/
foo foo.~1~ foo.~2~ foo.~3~
$
答案 1 :(得分:1)
我会用这个
for file in $(cat bad-stuff.txt); do mv $file /quarantine/$file.`date -u +%s%N`; done
你将获得附加时间戳的每个文件(以纳秒为单位)。
答案 2 :(得分:1)
您可以创建由directory
和filename
组成的新文件名。因此,您可以在原始代码中再添加一个参数:
for ...; do mv $file /quarantine/$(echo $file | sed 's:/:_:g') ; done
请注意,您应该使用足够特殊的正确字符替换_
。