GNU/Linux >> Znalost Linux >  >> Linux

Vypsat všechny adresáře, které nemají soubor s daným názvem souboru uvnitř?

Jak bych šel do výpisu všech adresářů, které ne máte uvnitř soubor s daným názvem souboru? např. vzhledem k tomuto stromu

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

Chci uvést seznam adresářů, které ne mít soubor s názvem README , v tomto případě by to byl adresář /c . jak bych to udělal? Nenapadá mě žádná syntaxe používající např. find .

Přijatá odpověď:

Za předpokladu find implementace jako GNU find který přijímá {} vložené do argumentu -exec :

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

nebo bez problematického vkládání:

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

Příklad

Zde mají adresáře 1/1 až 5/5 README, ostatní adresáře jsou prázdné.

$ 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

Nyní, když spustíme tuto verzi našeho find příkaz:

$ 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

Odkazy

  • Vyloučit z hledání adresáře, které neobsahují konkrétní název souboru?

Linux
  1. Výpis všech e-mailových adres v souboru s grep

  2. Vypsat všechny příkazy, které Shell zná?

  3. Najděte všechny soubory s názvem obsahujícím řetězec

  1. V Linuxu, jak vytvořit soubor s názvem, který je aktuální datum a čas

  2. Najít adresáře se všemi soubory staršími než X?

  3. Zobrazit historii souboru (seznam uživatelů, kteří upravili soubor)

  1. Jak zachytit všechny disky, které nemají souborový systém

  2. Odstraňte všechny složky ve složce kromě jedné s určitým názvem

  3. Linux mv soubor s dlouhým názvem