GNU/Linux >> Znalost Linux >  >> Linux

Proveďte příkaz, kde je nalezen soubor?

Jak provedu příkaz, kde je nalezen soubor?
Předpokládejme, že mám adresář s názvem testdir který obsahuje následující:

$ ls -R testdir/
testdir/:
dir1  dir2  dir3  dir4  dir5

testdir/dir1:
doc1.pdf

testdir/dir2:
file1.txt

testdir/dir3:
doc2.pdf

testdir/dir4:
file2.txt

testdir/dir5:
doc5.pdf

Nyní chci provést akci (provést příkaz), kde find najde určitý soubor/typ souboru. Například mi dovolte najít *.pdf :

$ find . -name '*.pdf'
./testdir/dir3/doc2.pdf
./testdir/dir5/doc5.pdf
./testdir/dir1/doc1.pdf

Nyní předpokládejme, že chci provést příkaz (například řeknu touch file ), kde výše uvedený příkaz najde soubor(y). Jinými slovy, chci vytvořit soubor s názvem file v každém adresáři je alespoň jeden .pdf byl nalezen, takže dostávám:

$ ls -R testdir/
testdir/:
dir1  dir2  dir3  dir4  dir5

testdir/dir1:
doc1.pdf  file

testdir/dir2:
file1.txt

testdir/dir3:
doc2.pdf  file

testdir/dir4:
file2.txt

testdir/dir5:
doc5.pdf  file

Jak takovou práci provedu?
Může být pro každý nalezený soubor cd tam, kde soubor existuje, a provést příkaz rekurzivně.
Vím, že find má úžasnou funkci:-exec ale nemůžu to zprovoznit.

Toto je pouze příklad pro získání představy o tom, co chci dělat. Obecně:Jak provést příkaz, kde jsou nalezeny soubory (pomocí find ) rekurzivně?

Přijatá odpověď:

Pokud spustíte tento příkaz, váš touch file bude spuštěn, potenciálně vícekrát, z adresáře, ve kterém byl příkaz spuštěn:

find -name '*.pdf' -exec touch file ;

Na druhou stranu, pokud spustíte tuto variantu, každá instance příkazu bude spuštěna v adresáři cílového souboru:

find -name '*.pdf' -execdir touch file ;

V obou případech to můžete vidět v akci nahrazením touch file buď s echo {} a/nebo pwd .

Z manuálové stránky:

-execdir command ;
-execdir command {} +

    Jako -exec , ale zadaný příkaz je spuštěn z podadresáře obsahujícího odpovídající soubor, což obvykle není adresář, ve kterém jste začali find .


Linux
  1. mkfs.hfsplus:příkaz nenalezen

  2. dos2unix:příkaz nenalezen

  3. nano:příkaz nenalezen

  1. chmod:příkaz nenalezen

  2. id:příkaz nenalezen

  3. w:příkaz nenalezen

  1. mkfs:příkaz nenalezen

  2. df:příkaz nenalezen

  3. du:příkaz nenalezen