GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu vynutit pouze relativní cesty ve výstupu hledání?

Můžete použít %P ve formátu -printf směrnice:

find ${rootDir} -name '*.doc' -printf "%P\n"

se ve vašem příkladu zobrazí:

subdir/test.doc
second.doc

Potom můžete použít tento find seznam v for výraz, aby bylo možné spustit náš příkaz exec, jako v:

for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
    tar rvf docs.tar ${f}
done

Pokud spustíte find z požadovaného kořenového adresáře a nezadávejte absolutní počáteční bod v find 's, vypíše relativní cesty k tar vyvolání příkazů, které vytváří. Asi takhle:

cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;

Pokud nechcete trvale změnit aktuální pracovní adresář a používáte bash nebo podobně jako váš shell můžete udělat

pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd

místo toho.

Všimněte si, že pushd/popd nejsou přítomny ve všech shellech, takže podle potřeby zkontrolujte manuálovou stránku. Jsou přítomny v bash, ale ne v základní implementaci sh, takže když explicitně používají /bin/bash můžete se na ně spolehnout, ale nemůžete, pokud skript požaduje /bin/sh místo toho (protože se to může namapovat na menší shell, který nemá vylepšení bash)


Linux
  1. Jak vytvořit adresáře pouze pro výstup stromu?

  2. Jak mohu vypočítat kontrolní součet md5 adresáře?

  3. Jak vyloučím absolutní cesty pro tar?

  1. Jak mohu vytvořit soubor v každé složce?

  2. Jak mohu spustit dos2unix v celém adresáři?

  3. Jak najdu soubory, které mají pouze určitá oprávnění pro vlastníka?

  1. Jak najdu svou verzi shellu pomocí příkazu Linux?

  2. Jak mohu pomocí ls vypsat pouze neprázdné soubory?

  3. Jak mohu nainstalovat RPM, aniž bych byl root?