在特定目录中,我希望能够保存符号链接(symbolic link)及其指向的文件,同时删除其余部分。
示例:/home/me/test_dir ls
我的链接 文件1.txt 文件2.txt 文件3.txt
随着时间的推移,“mylink”指向 file1.txt,然后指向 file2.txt,现在指向 file3.txt
mylink ->/home/me/test_dir/file3.txt
我可以执行哪行命令来仅删除 file1.txt 和 file2.txt?我有大约 800K 个文件需要删除。
谢谢。
最佳答案
这是一个脚本,如果目录中没有指向常规文件的符号链接(symbolic link),则该脚本会从该目录中删除常规文件。
#!/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;
它尝试考虑绝对和相对符号链接(symbolic link)路径,但使用风险由您自行承担。
关于linux - 删除目录中的所有文件而不删除符号链接(symbolic link)及其指向的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51415312/