Eu não acho que rm
faça isso sozinho, não há sinalização óbvia nas opções.
Você pode usar uma mistura de find
e rm
para alcançá-lo.
find -maxdepth 1 -type f -writable -exec rm {} +
Por exemplo,
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
Isso não se comportará da mesma forma que rm -r
, então você precisará repensá-lo se quiser descer em subdiretórios e, conforme escrito, ele não removerá os diretórios.
Como @Giles sugere, você também pode usar a ação -delete
para fazer todo o trabalho dentro do find
, por exemplo,
$ 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