![如何删除一个文件夹中的符号文件,但保持其子目录不变?](https://linux22.com/image/58682/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E7%AC%A6%E5%8F%B7%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%86%E4%BF%9D%E6%8C%81%E5%85%B6%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%8D%E5%8F%98%EF%BC%9F.png)
假设有一个文件夹,其中包含文件、符号链接和子目录,如下所示:
files: file1, file2, file3, file4
symbolic links: link1-->file2, link2-->file3
subdirectories: dir1, dir2
我想删除 file1、file3、file3、file4、link1 和 link2。但保持 dir1 和 dir2 不变。
请注意,没有一种模式file*
可以覆盖所有文件名。上面的文件名只是举例,实际上它们的名称是多种多样的。
答案1
您可以find
与type
参数一起使用。
find . -maxdepth 1 -type f -exec rm -f {} \;
您可以通过删除该部分来进行试运行,-exex rm -f {} \;
以查看将被删除的文件。
答案2
简单的方法是使用
$ rm ./*
这里我们没有使用递归删除(-r
),因此只有父目录中的文件(隐藏文件除外)应该被删除。
答案3
使用 bash (并忽略符号链接):
for file in *; do [[ -f $file ]] && rm -- "$file"; done
答案4
sudo mkdir a b c d e
sudo touch a/1 b/2 c/3 d/4 e/5 e/a e/b
ls
a b c d e pqr xyz
cd a/
ls
1
cd ../e/
ls
5 a b
cd /var/warehouse/abc/
find . -type f ! -path "./a*" ! -path "./b*"
./d/4
./e/a
./e/b
./e/5
./c/3
sudo find . -type f ! -path "./a*" ! -path "./b*" -exec rm -f {} \;