2010-03-22 22 views

risposta

31
find -type f -maxdepth 1 -writable 
+0

Emette un avvertimento sull'ordine delle opzioni sul mio sistema. –

+0

quale Linux stai usando? – matja

+1

+1 per maxdepth e tipo f, ho incluso questi nella mia risposta. –

3

-f metterà alla prova per un file

-w metterà alla prova se è scrivibile

Esempio:

$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done 
+2

-1 inutile senza un esempio ... – lexu

+1

Anche inutile senza dire a quale comando queste opzioni devono essere applicate. – bignose

+0

@ lexu/bignose - è una domanda 'bash'. '-f' e' -w' sono operatori di bash. Cosa ti serve ancora ? –

4

Se siete in guscio utilizzare

find . -maxdepth 1 -type f -writable 

vedere man trovare

Troverete a ottenere risposte migliori per questo tipo di domanda su superuser.com o serverfault.com

Se si sta scrivendo il codice non solo usando le coperture si può essere interessati in accesso (2) chiamata di sistema.

Questo question è già stato chiesto il serverfault

EDIT: @ ghostdog74 chiesto se è stato rimosso i permessi di scrittura per questo file se questo sarebbe ancora trovare il file. La risposta, no, trova solo i file che sono scrivibili.

[email protected] ~/temp 
$ cd temp 

[email protected] ~/temp/temp 
$ ls 

[email protected] ~/temp/temp 
$ touch newfile 

[email protected] ~/temp/temp 
$ ls -alph 
total 0 
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./ 
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../ 
-rw-r--r-- 1 dwaters Domain Users 0 Mar 22 13:27 newfile 

[email protected] ~/temp/temp 
$ find . -maxdepth 1 -type f -writable 
./newfile 

[email protected] ~/temp/temp 
$ chmod 000 newfile 

[email protected] ~/temp/temp 
$ ls -alph 
total 0 
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./ 
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../ 
---------- 1 dwaters Domain Users 0 Mar 22 13:27 newfile 

[email protected] ~/temp/temp 
$ find . -maxdepth 1 -type f -writable 

[email protected] ~/temp/temp 
+1

Vedo il seguente errore con la soluzione: find: predicato non valido '-writable ' – vehomzzz

+0

sorry had. nel posto sbagliato, ora fissato, guarda l'uomo trovare per vedere come utilizzare questo comando –

+0

se si rimuove tutta l'autorizzazione scrivibile in un file e quindi si usa il comando, trova ancora il file? sono curioso – ghostdog74

0
for var in `ls` 
do 
if [ -f $var -a -w $var ] 
then 
echo "$var having write permission"; 
else 
echo "$var not having write permission"; 
fi 
done 
+1

non utilizzare ls con il ciclo per analizzare i nomi dei file. cita anche le tue variabili nel test if/else. – ghostdog74

3

per trovare i file scrivibili a prescindere dal proprietario, il gruppo o altri, è possibile controllare il flag w nella colonna di autorizzazione del file di ls.

ls -l | awk '$1 ~ /^.*w.*/' 

$ 1 è il primo campo, (vale a dire il blocco il permesso di ls -l), l'espressione regolare solo dire trovare la lettera "w" in campo uno. È tutto.

se si vuole trovare il permesso proprietario scrittura

ls -l | awk '$1 ~ /^..w/' 

se si vuole trovare il permesso gruppo di scrittura

ls -l | awk '$1 ~ /^.....w/' 

se si vuole trovare altri scrivono il permesso

ls -l | awk '$1 ~ /w.$/' 
+0

è fantastico! può ypu spiegare questo comando awk pelase – vehomzzz

+0

cosa significa tilde? – vehomzzz

+0

la tilde è l'operatore di regex di awk per "match". molto simile all'operatore regex di Perl – ghostdog74

16

Il L'opzione -writable trova i file che sono scrivibili dall'utente corrente.Se si desidera trovare i file che sono scrivibili da chiunque (o anche altre combinazioni), è possibile utilizzare l'opzione -perm:

find -maxdepth 1 -type f -perm /222 

Ciò trovare i file che sono scrivibili dal loro proprietario (chiunque esso sia) :

find -maxdepth 1 -type f -perm /200 

Vari personaggi possono essere utilizzati per controllare il significato dell'argomento modalità:

  • / - ogni bit di permesso
  • - - tutti i bit (-222 vorrebbe dire tutti - utente, gruppo e altri)
  • nessun prefisso - specifica esatta (222 significherebbe non permssions diverse scrittura)
+0

Questa è una soluzione molto elegante. Come posso modificarlo per trovare i file che sono scrivibili solo dal proprietario. – kshenoy

+3

@kshenoy: One way: '-perm -u + w! -perm -g + w! -perm -o + w' –

+0

Su Mac o qualsiasi variante Linux precedente, usa: find -type f + perm 222 – user1959190

0
stat -c "%A->%n" *| sed -n '/^.*w.*/p' 
0

Il problema con find -writable è che non è portatile e non è facile da emulare correttamente con gli operatori portatili find. Se la versione di find non ce l'ha, è possibile utilizzare touch per verificare se il file può essere scritto, utilizzando -r per assicurarsi che (quasi) non si modifica il file:

find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done

Il -r l'opzione per touch è in POSIX, quindi può essere considerata portatile. Naturalmente, questo sarà molto meno efficiente di find -writable.

Nota che touch -rsarà aggiornamento di ogni file ctime (momento del cambio alla sua meta-dati), ma si preoccupa di rado su ctime comunque.

+0

Hai provato 'touch' su un file di sola lettura come root o su un file di tua proprietà? La possibilità di aggiornare un timestamp non implica che il file sia scrivibile. –

+0

Se sei root, i file di sola lettura su file system scrivibili sono scrivibili, quindi non vedo il problema lì. – Idelic

+0

Su redhat 4 ottengo "while: Expression Sintassi". – jgritty

0

Se si desidera trovare tutti i file che sono scrivibili da et al apache allora si può fare questo:

sudo su www-data 
find . -writable 2>/dev/null 

Sostituire www-data con nessuno o apache o qualunque sia il vostro utente web è.

0

So che questo un filo molto vecchio, ma ...

Il comando di seguito mi ha aiutato: find . -type f -perm /+w

È possibile utilizzare -maxdepth in base a quanti livelli sotto directory che si desidera effettuare la ricerca. Sto usando Linux 2.6.18-371.4.1.el5.

Problemi correlati