GNU/Linux >> Znalost Linux >  >> Linux

Najděte soubory a vytiskněte pouze jejich nadřazené adresáře

Chybí mi tu něco? Všechny tyto regulární výrazy a/nebo smyčkování jistě nejsou nutné, tuto práci udělá jednořádkový. Také řešení "for foo in $()" selžou, pokud jsou v názvech cesty mezery.

Stačí použít dirname dvakrát s xargs, abyste získali rodiče rodiče...

# make test case
mkdir -p /nfs/office/hht/info
mkdir -p /nfs/office/wee1/info
touch /nfs/office/hht/info/.user.log
touch /nfs/office/wee1/info/.user.log

# parent's parent approach
cd /nfs//office/ && find . -name '.user.log' | xargs -I{} dirname {} | xargs -I{} dirname {}

# alternative, have find print parent directory, so dirname only needed once...
cd /nfs//office/ && find . -name ".user.log" -printf "%h\n"  | xargs -I{} dirname {}

Produkuje

./hht
./wee1

Můžete to snadno provést pomocí možností formátování -printf akce find (viz man find ).

cd /nfs//office/ && find . -name '.user.log' -printf "%h\n"
./hht/info
./wee1/info

Z manuálové stránky:

%h\n vytiskne cestu pro každý soubor na nový řádek.

Vezměte prosím na vědomí, že -printf je pouze GNU. Nebude fungovat na macOS (systém BSD).


for file in $(find /nfs/office -name .user.log -print)
do
    parent=$(dirname $(dirname $file))
    echo $parent
done

EDIT:Promiňte, vynechal jste, že chcete adresář prarodičů.


Linux
  1. Najít největší soubory nebo adresáře?

  2. Linux Odstraňte soubory a adresáře

  3. Jak najít a odstranit prázdné adresáře a soubory v Unixu

  1. Jak rekurzivně vypsat všechny soubory a adresáře

  2. Najděte a zkopírujte soubory

  3. Jak přesunu soubory a adresáře do nadřazené složky v Linuxu?

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Najděte největší soubory a adresáře v Linuxu

  3. Jak najdu soubory a součet jejich velikostí?