Come trovare tutti i file e le cartelle vuoti in una directory specifica, inclusi i file che sembrano vuoti ma non lo sono?


18

Diciamo che nella mia cartella ~/listho una grande quantità di cartelle ognuna con le proprie sottocartelle e sottocartelle ecc. E ci sono molti file quasi su ogni livello. Tuttavia, alcuni di questi file e cartelle sono vuoti, quindi come posso ricorrere in modo ricorsivo a tutti loro per trovare i file e le cartelle vuoti? E poi li hanno visualizzati in un elenco di posizioni dei file in modo che io sappia dove ognuno è (dovrebbe anche essere chiaro quale sia un file e quale una cartella perché non tutti i file hanno estensioni di file). Sto eseguendo Ubuntu GNOME 15.10 con GNOME 3.18.

Si noti che sarebbe anche molto utile se mi dicesse anche se un file sembrava vuoto ma non lo era (ad esempio se conteneva spazi o interruzioni di riga o qualcosa del genere). E distinguerebbe tra un vero file vuoto e uno che sembra vuoto nell'output.


1
Un file vuoto, è un file senza caratteri? (potrebbero essere spazi, interruzioni di riga e schede)?
Jacob Vlijm,

@JacobVlijm: Beh, prima pensavo solo a file che sono 0 byte, ma ora che me lo dici, qualcuno potrebbe essere stato abbastanza pazzo da darmi un file con spazi o interruzioni di riga o qualcosa del genere, quindi vorrei rilevare anche quelli, ma vorrei che l'output distinguesse tra un file vuoto effettivo e uno che sembra vuoto.

Risposte:


25

A partire dal man find

    -empty File is empty and is either a regular file or a directory.

Quindi per trovare sia file vuoti che directory è sufficiente farlo

find ~/lists -empty

Per indicare il tipo, è possibile utilizzare l' %yidentificatore del formato di output

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

per esempio

find ~/lists -empty -printf '%y %p\n'

o fare uso di un programma esterno come ls, che include --classifyun'opzione

    -F, --classify
          append indicator (one of */=>@|) to entries

vale a dire

find ~/lists -empty -exec ls -Fd {} \;

Se la tua definizione di "vuoto" viene espansa per includere file contenenti solo caratteri di spazi bianchi, allora diventa più complicata e più intensa dal punto di vista computazionale, poiché ora è necessario aprire almeno tutti i file non vuoti ed esaminarne il contenuto. Il modo più efficiente che mi viene in mente dalla cima della mia testa sarebbe qualcosa di simile

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

(vuoto, OPPURE un file AND grep non rileva almeno un carattere non vuoto). Probabilmente c'è un modo migliore però.


Scusa, ho perso qualcosa, per favore guarda la versione modificata della mia domanda. Non dovrebbe essere troppo da aggiungere.

11

Dalla ~/listcartella:

find . -empty -type d

per elencare directory vuote e

find . -empty -type f

per elencare file vuoti.

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

per elencare cartelle e file vuoti inclusi spazi bianchi e righe vuote


E questo elenca ricorsivamente anche le sottocartelle e i loro contenuti?

questo mostrerà in modo ricorsivo file e cartelle
vuoti

Scusa, ho perso qualcosa, per favore guarda la versione modificata della mia domanda. Non dovrebbe essere troppo da aggiungere.

[ `grep -c [[:alnum:]] "{}"` -eq 0 ]lascia passare i file contenenti solo caratteri non presenti nel [A-Za-z0-9]set.
kos,

@kos - probabilmente il grafico invece Alnum farà il lavoro
EdiD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.