2012-03-01 15 views
8

Voglio esaminare tutti i file chiave presenti nel mio /proc. Ma /proc ha innumerevoli directory corrispondenti ai processi in esecuzione. Non voglio che queste directory siano elencate. Tutti i nomi di queste directory contengono solo numeri. Dato che io sono povero nelle espressioni regolari, qualcuno può dirmi qual è il regex che devo inviare a ls per renderlo NON per cercare file/directory che hanno numeri nel loro nome?Elenca tutti i file che non iniziano con un numero

UPDATE: Grazie a tutte le risposte! Ma mi piacerebbe avere una soluzione da solo ls invece della soluzione ls+grep. Le soluzioni da solo ls offerte finora non sembrano funzionare!

risposta

6

Tutti i file e le directory in /proc che non contengono numeri (in altre parole, ad esclusione delle directory di processo):

ls -d /proc/[^0-9]* 

Tutti i file in modo ricorsivo sotto /proc che non iniziano con un numero:

find /proc -regex '.*/[0-9].*' -prune -o -print 

Ma esclude anche i file numerici in sottodirectory (ad esempio /proc/foo/bar/123). Se si desidera escludere solo i file di alto livello con un numero:

find /proc -regex '/proc/[0-9].*' -prune -o -print 

Hold on di nuovo! Ciò non significa che qualsiasi regular files creato da touch /proc/123 o simile sarà escluso? Teoricamente sì, ma non penso che tu possa farlo. Prova a creare un file per un PID che non esiste:

$ sudo touch /proc/123 
touch: cannot touch `/proc/123': No such file or directory 
+0

'ls -d/proc/[^ 0-9] *' elenca precisamente le directory contenenti numeri (Che non voglio :() cioè Directory di processo! Anche qui c'è qualcosa di strano! –

+0

@Stacker: quale sistema operativo sei su Cosa restituisce 'ls --version'? L'ho eseguito su due distro differenti (Ubuntu 64-bit e Linux Mint 64-bit, GNU' ls' 8.5 su almeno una macchina) e mostra solo file e directory * senza * numeri, da '/ proc/acpi' a'/proc/zoneinfo'. * 'ls' è notoriamente non esportabile *, quindi potrebbe essere semplicemente che' -d' fa qualcosa di completamente diverso nella tua versione. – l0b0

+0

Oops ! Hai ragione! Ho eseguito il tuo comando su Ubuntu 11.10 e funziona perfettamente! Ero su AIX 6.1, l'altro giorno (riconfermato di nuovo) e si rompe !! Sono confuso sul perché! 'Man ls' e cercare '-d' dà quasi una spiegazione simile su entrambi i sistemi che le directory saranno trattate come qualsiasi altro file! Perché questa differenza ?! –

2

Utilizzare grep con -v che indica di stampare tutte le righe non corrispondenti allo il motivo.

ls /proc | grep -v '[0-9+]' 
0

seguente espressione regolare corrisponde a tutti i personaggi tranne i numeri

^[\D]+?$ 

Speranza che aiuta!

1

ls /proc | grep -v -E '[0-9]+'

7

Non hai bisogno di grep, basta ls:

ls -ad /proc/[^0-9]* 

se si desidera cercare l'utilizzo dell'intera struttura sottodirectory ritrovamento:

find /proc/ -type f -regex "[^0-9]*" -print 
+0

Penso che ci sia qualcosa di sbagliato nella tua soluzione 'ls'. Sta elencando tutti i file all'interno delle cartelle che iniziano con i numeri! Non voglio affatto le directory che iniziano con il numero! –

+0

Anche la soluzione 'find' si sta precipitando in cartelle con i numeri nel loro nome! Mi sto perdendo qualcosa? –

+0

-1 Qualcuno, tranne @Stacker, ha provato questi comandi?'Ls' elenca i file corretti, ma elenca anche il contenuto della directory di/proc/* /'. E il 'find' elenca chiaramente tutte le directory di processo e i loro file. – l0b0

0

Per motivi di di completamento. Puoi applicare la risposta di Mithandir con find.

find . -name "[^0-9]*" -type f 
Problemi correlati