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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除目录中的所有文件而不删除符号链接及其指向的文件相关的知识,希望对你有一定的参考价值。

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

示例:/ home / me / test_dir ls

mylink file1.txt file2.txt file3.txt

随着时间的推移,“mylink”指向file1.txt,然后指向file2.txt,现在指向file3.txt

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

我可以执行什么行命令来删除file1.txt和file2.txt?我有大约800K文件需要删除。

谢谢。

答案

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

#!/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;

它会尝试考虑绝对和相对符号链接路径,但使用风险自负。

以上是关于删除目录中的所有文件而不删除符号链接及其指向的文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统管理_主题02 :管好文件_2.4 链接文件_ln

Linux中的rm命令

rm 删除文件或目录

如何在 Python 中删除文件或文件夹?

Linux文件操作

rm 命令