0

我在一些服务器上遇到了许多具有相同内容和相同名称的文件。我需要隔离这些文件进行分析,所以我不能只删除重复项。操作系统是 Linux(centos 和 ubuntu)。

我列举了文件名和位置并将它们放入一个文本文件中。

然后我执行一个 for 语句将文件移动到隔离区。

for file in $(cat bad-stuff.txt); do mv $file /quarantine ;done

问题是它们具有相同的文件名,我只需要在文件名中添加一些独特的东西来让它正确保存。我确定这很简单,但我不擅长正则表达式。谢谢您的帮助。

4

3 回答 3

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~
$
于 2013-06-04T16:38:46.943 回答
1

You can create a new file name composed by the directory and the filename. Thus you can add one more argument in your original code:

for ...; do mv $file /quarantine/$(echo $file | sed 's:/:_:g') ; done

Please note that you should replace the _ with a proper character which is special enough.

于 2013-06-04T17:08:26.627 回答
1

我会用这个

for file in $(cat bad-stuff.txt); do mv $file /quarantine/$file.`date -u +%s%N`; done

您将获得附加时间戳(以纳秒为单位)的每个文件。

于 2013-06-04T16:51:43.017 回答