GNU/Linux >> Linux Esercitazione >  >> Linux

Elencare tutte le directory che non contengono un file con un nome file specificato?

Come potrei elencare tutte le directory che non hai un file con un determinato nome di file all'interno? per esempio. dato questo albero

/
  /a
     README
     file001
     file002
  /b
     README
     file001
  /c
     file003

Voglio elencare le directory che non avere un file chiamato README , in questo caso sarebbe la directory /c . Come potrei farlo? Non riesco a pensare a nessuna sintassi usando ad es. find .

Risposta accettata:

Supponendo un find implementazione come GNU find che accetta un {} incorporato in un argomento in -exec :

$ find . -type d ! -exec test -e '{}/README' ; -print

oppure, senza l'incorporamento problematico:

$ find . -type d ! -exec sh -c 'test -e "$1"/README' sh {} ; -print

Esempio

Qui le directory da 1/1 a 5/5 hanno un README, le altre directory sono vuote.

$ tree 
.
|-- 1
|   `-- 1
|       `-- README
|-- 10
|   `-- 10
|-- 2
|   `-- 2
|       `-- README
|-- 3
|   `-- 3
|       `-- README
|-- 4
|   `-- 4
|       `-- README
|-- 5
|   `-- 5
|       `-- README
|-- 6
|   `-- 6
|-- 7
|   `-- 7
|-- 8
|   `-- 8
`-- 9
    `-- 9

Ora quando eseguiamo questa versione del nostro find comando:

$ find . -type d ! -exec test -e '{}/README' ; -print
.
./10
./10/10
./7
./7/7
./9
./9/9
./6
./6/6
./5
./8
./8/8
./4
./1
./3
./2

Riferimenti

  • Escludere le directory nella ricerca che non contengono un nome file specifico?

Linux
  1. Eliminare tutti i file in una directory il cui nome non corrisponde a una riga in un elenco di file?

  2. Come ottenere Ls per elencare le directory con una barra in avanti finale?

  3. Come creare un file con una determinata dimensione in Linux?

  4. Come uccidere tutti i processi con un determinato nome parziale?

  5. Elenca tutti i file di immagini grafiche con find?

Comando Ls in Linux (Elenca file e directory)

trova i file che hanno un numero nel nome del file maggiore di

Come eliminare un file con un nome strano?

Come catturare tutti i dischi che non hanno un file system

Elimina tutte le cartelle all'interno di una cartella tranne una con un nome specifico

File Linux mv con nome lungo