Desidero identificare rapidamente tutti i file scrivibili nella directory. Qual è il modo rapido per farlo?Trova tutti i file scrivibili nella directory corrente
risposta
find -type f -maxdepth 1 -writable
-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
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
Vedo il seguente errore con la soluzione: find: predicato non valido '-writable ' – vehomzzz
sorry had. nel posto sbagliato, ora fissato, guarda l'uomo trovare per vedere come utilizzare questo comando –
se si rimuove tutta l'autorizzazione scrivibile in un file e quindi si usa il comando, trova ancora il file? sono curioso – ghostdog74
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
non utilizzare ls con il ciclo per analizzare i nomi dei file. cita anche le tue variabili nel test if/else. – ghostdog74
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.$/'
è fantastico! può ypu spiegare questo comando awk pelase – vehomzzz
cosa significa tilde? – vehomzzz
la tilde è l'operatore di regex di awk per "match". molto simile all'operatore regex di Perl – ghostdog74
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)
Questa è una soluzione molto elegante. Come posso modificarlo per trovare i file che sono scrivibili solo dal proprietario. – kshenoy
@kshenoy: One way: '-perm -u + w! -perm -g + w! -perm -o + w' –
Su Mac o qualsiasi variante Linux precedente, usa: find -type f + perm 222 – user1959190
stat -c "%A->%n" *| sed -n '/^.*w.*/p'
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 -r
sarà aggiornamento di ogni file ctime (momento del cambio alla sua meta-dati), ma si preoccupa di rado su ctime comunque.
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. –
Se sei root, i file di sola lettura su file system scrivibili sono scrivibili, quindi non vedo il problema lì. – Idelic
Su redhat 4 ottengo "while: Expression Sintassi". – jgritty
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 è.
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.
- 1. Come elencare i file nella directory corrente?
- 2. lista PHP tutti i file nella directory
- 3. Copia tutti i file nella directory
- 4. Trova tutti i file CSV in una directory usando Python
- 5. Git bash - mostra i file nella directory corrente
- 6. Compilare l'ultimo file utilizzato nella directory corrente
- 7. Comando per trovare tutti i file privati di vista nella directory corrente in modo ricorsivo
- 8. Cosa si espande ricorsivamente in tutti i file nella directory corrente?
- 9. Trova tutti i file .php nella cartella in modo ricorsivo
- 10. Trova tutti i file htaccess sul server
- 11. gitignore tutti i file di estensione nella directory
- 12. rimuovere tutti i file di dimensione zero nella directory specificata
- 13. list.files() tutti i file nella directory e nelle sottodirectory
- 14. scorrere tutti i file Word in Directory
- 15. Elenca tutti i computer nella directory attiva
- 16. Trova tutti i file in una cartella
- 17. Elimina tutti i file in una directory
- 18. Trova tutti i file in una directory che non sono directory stesse
- 19. vim: ricerca sostituire su tutti i buffer scrivibili
- 20. Trova tutti i file bloccati in TFS
- 21. Come trovare tutti i file nella directory corrente con nomi di file che corrispondono a un determinato pattern in python?
- 22. Rimuovere tutti i file in una directory
- 23. vim - Come chiudere tutti i buffer nella scheda corrente?
- 24. Trova file nella directory dalla riga di comando
- 25. Controllare se il file si trova nella (sotto) directory
- 26. Estrai tutti i file con percorso di directory nella directory data
- 27. Elimina tutti i file/directory eccetto due directory specifiche
- 28. XCode Trova e sostituisci tutti i file di progetto
- 29. Trova file per nome nella struttura della directory, utilizzando bash
- 30. Elenca i file su una dimensione specifica nella directory corrente e in tutte le sottodirectory
Emette un avvertimento sull'ordine delle opzioni sul mio sistema. –
quale Linux stai usando? – matja
+1 per maxdepth e tipo f, ho incluso questi nella mia risposta. –