我只想删除目录中的可写文件。如果我做
rm *
它删除了所有可写文件(到目前为止一切顺利),但我收到每个不可写文件的提示。我不需要提示,我只想保留不可写的文件。
答案不是“rm -f”,因为这将删除不可写的文件。
那么,有没有简单的命令可以删除只是可写文件,没有得到任何提示?
答案1
我认为rm
不会单独执行此操作,选项中没有明显的标志。
find
您可以使用和的混合rm
来实现它。
find -maxdepth 1 -type f -writable -exec rm {} +
例如,
tony@trinity:~/temp$ ls -l
total 0
tony@trinity:~/temp$ touch bob
tony@trinity:~/temp$ touch bill
tony@trinity:~/temp$ touch fred
tony@trinity:~/temp$ chmod 400 fred
tony@trinity:~/temp$ ls -l
total 0
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 bill
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 bob
-r-------- 1 tony tony 0 Mar 10 20:19 fred
tony@trinity:~/temp$ mkdir test
tony@trinity:~/temp$ cd test
tony@trinity:~/temp/test$ touch chris
tony@trinity:~/temp/test$ cd ..
tony@trinity:~/temp$ ls -lR
.:
total 4
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 bill
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 bob
-r-------- 1 tony tony 0 Mar 10 20:19 fred
drwxr-xr-x 2 tony tony 4096 Mar 10 20:19 test
./test:
total 0
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 chris
tony@trinity:~/temp$ find -maxdepth 1 -type f -writable -exec rm {} +
tony@trinity:~/temp$ ls -lR
.:
total 4
-r-------- 1 tony tony 0 Mar 10 20:19 fred
drwxr-xr-x 2 tony tony 4096 Mar 10 20:19 test
./test:
total 0
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 chris
这不会表现得一样,rm -r
所以如果你想下降到子目录,你需要重新考虑它,并且正如所写的,它根本不会删除目录。
作为@贾尔斯建议,您还可以使用该-delete
操作来完成 中的所有工作find
,例如,
$ ls -lR
.:
total 4
-rw-r--r-- 1 tony tony 0 Mar 10 23:16 bill
-rw-r--r-- 1 tony tony 0 Mar 10 23:16 bob
-r-------- 1 tony tony 0 Mar 10 20:19 fred
drwxr-xr-x 2 tony tony 4096 Mar 10 20:19 test
./test:
total 0
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 chris
tony@trinity:~/temp$ find -maxdepth 1 -type f -writable -delete
tony@trinity:~/temp$ ls -lR
.:
total 4
-r-------- 1 tony tony 0 Mar 10 20:19 fred
drwxr-xr-x 2 tony tony 4096 Mar 10 20:19 test
./test:
total 0
-rw-r--r-- 1 tony tony 0 Mar 10 20:19 chris
答案2
for f in *; do [ ! -w "$f" ] || rm -- "$f"; done
或者用&&
而不是||
:
[ -w "$f" ] && rm -- "$f"
(我更喜欢,||
因为我使用了set -e
很多,并且一个裸露的、不成功的&&
子句将导致该模式下的退出)
答案3
和zsh
:
rm -- *(@,^/e:'[ -w $REPLY ]':)
也就是说,删除您具有写入权限的符号链接和非目录(rm
无论如何都不会删除它们,因此我们不妨排除它们)。请注意,w
此处不能使用 glob 限定符,因为它仅检查文件的所有者(可能不是您)是否可写。