删除目录中的所有文件而不删除符号链接及其指向的文件

时间:2018-07-19 05:57:03

标签: linux hyperlink find rm

在一个特定的目录中,我希望能够在删除其余部分的同时保存符号链接及其指向的文件。

示例:/ home / me / test_dir ls

我的链接 file1.txt file2.txt file3.txt

随着时间的流逝,“ mylink”指向了file1.txt,然后是file2.txt,现在是file3.txt

mylink-> /home/me/test_dir/file3.txt

我可以执行以下哪行命令来删除file1.txt和file2.txt?我大约需要删除80万个文件。

谢谢。

1 个答案:

答案 0 :(得分:-1)

这是一个脚本,如果该目录中没有指向它们的符号链接,则该脚本将从目录中删除这些文件。

#!/usr/bin/perl
# Usage: perl rmlinks.pl DIRECTORY

use warnings;
use strict;
use autodie;
use Cwd qw/abs_path/;

my $dirname = shift;
opendir(my $dir, $dirname);
chdir $dirname;
my %referenced;

while (my $file = readdir $dir) {
  $referenced{abs_path(readlink $file)} = 1 if -l $file;
}

rewinddir $dir;
while (my $file = readdir $dir) {
  unlink $file if -f $file && ! -l $file && !exists $referenced{abs_path $file};
}

closedir $dir;

它尝试同时考虑绝对符号链接路径和相对符号链接路径,但使用后果自负。