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?
Lze ovladač Nouveau Xorg použít pro vícehlavou pracovní stanici?
Linux – Uložit karty Nemo v Linux Mintu?