GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso forzare solo percorsi relativi nell'output di ricerca?

Puoi usare il %P formato nel -printf direttiva:

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

visualizzerà nel tuo esempio:

subdir/test.doc
second.doc

Puoi quindi utilizzare questo find elenco in un for expression, per eseguire il nostro comando exec, come in:

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

Se esegui find dalla directory root desiderata e non specificare un punto di partenza assoluto in find , produrrà percorsi relativi al tar invocazioni di comandi che costruisce. In questo modo:

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

Se non vuoi cambiare la directory di lavoro corrente in modo permanente e stai usando bash o simile alla tua shell che potresti fare

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

invece.

Nota che pushd/popd non sono presenti in tutte le shell, quindi controlla la pagina man come appropriato. Sono presenti in bash ma non nell'implementazione di base sh, quindi mentre usano esplicitamente /bin/bash puoi fare affidamento su di loro non puoi se uno script richiede /bin/sh invece (poiché questo potrebbe corrispondere a una shell più piccola che non ha i miglioramenti di bash)


Linux
  1. Come creare solo directory di output dell'albero?

  2. Come posso trovare la versione di Fedora che uso?

  3. Come posso creare un file in ogni cartella?

  4. Come posso eseguire dos2unix su un'intera directory?

  5. Come posso trovare file che hanno solo determinate autorizzazioni per il proprietario?

Come posso elencare solo i file non vuoti usando ls?

Come posso installare un RPM senza essere root?

Come posso vedere l'output di dmesg mentre cambia?

Come posso trovare le interfacce di rete disponibili?

Come trovare solo directory senza sottodirectory?

Come posso ordinare du -h output per dimensione