GNU/Linux >> Znalost Linux >  >> Linux

cp pouze soubory, přeskakování adresářů

Navrhuji vám použít rsync místo cp, pokud můžete, má možnost -m, která vyloučí prázdné složky, příklad:

rsync -am <origin> <destination>

Vysvětlení příkazu na stránce explainhell.com

Používám volbu -a, protože dělá spoustu pěkných výchozích akcí, ale pokud chcete, můžete také použít volbu -r, která nastaví pouze rekurzivní režim.

[PŘIDAT komentář]

Nevím o způsobu, jak to udělat pomocí cp, alespoň manuálová stránka nezobrazuje žádnou možnost, která to udělá za vás. Složitější řešení pravděpodobně můžete provést pomocí příkazu find najít seznam souborů/adresářů ke kopírování a pak jej předat cp, ale to by bylo mnohem složitější než rsync. rsync je dokonce téměř standardní v mnoha linuxech


cp skutečně nemá možnost získat pouze soubory, ale jak řekl Berserck, můžete použít find spolu s cp . Ve skutečnosti je to opravdu jednoduché:

# Copy only files
find /path/to/file -type f -execdir cp "{}" /dest/path ";"

Nebo:

# Copy everything except directories
find /path/to/file -not -type d -execdir cp "{}" /dest/path ";"

Vysvětlení

find je nástroj, který vyhledá požadované soubory. V první možnosti nastavíme -type f vrátit pouze běžné soubory. Ve druhé možnosti nastavíme -not -type d získat vše kromě adresářů. find provede argumenty předané -execdir nahrazující {} s jedním záznamem výsledku najednou a zastaví příkaz, když ; je nalezen (; by měl být escapován \; nebo ";" nebo by jej shell mohl rozšířit).

-execdir spustí příkaz s adresářem souboru jako jeho "pracovním adresářem" a je vhodnější místo -exec , zkontrolujte níže.

-type dokumentace volitelného příslušenství:

-typ c

Soubor je typu c:

b:blokovat (s vyrovnávací pamětí) speciální

c:znak (bez vyrovnávací paměti) speciální

d:adresář

p:pojmenované potrubí (FIFO)

f:běžný soubor

l:symbolický odkaz; toto nikdy neplatí, pokud je aktivní volba -L nebo -follow, pokud není symbolický odkaz přerušen. Pokud chcete hledat symbolické odkazy, když je aktivní -L, použijte -xtype.

s:zásuvka

D:dveře (Solaris)

-not dokumentace volitelného příslušenství:

! výraz

True, pokud je výraz nepravdivý. Tato postava bude také obvykle potřebovat ochranu před interpretací pomocí shellu.

-ne výraz

Stejný jako ! expr, ale není kompatibilní s POSIX.

-execdir dokumentace volitelného příslušenství:

-exec příkaz;

Spusťte příkaz; true, pokud je vrácen stav 0. Všechny následující argumenty k nalezení jsou považovány za argumenty příkazu až do argumentu sestávajícího z ';' se narazí. Řetězec '{}' je nahrazen aktuálním názvem souboru, který se zpracovává všude, kde se vyskytuje v argumentech příkazu [...]. Obě tyto konstrukce může být nutné escapovat (s '\') nebo citovat, aby byly chráněny před expanzí shellem. Zadaný příkaz se spustí jednou pro každý odpovídající soubor. Příkaz se provede v počátečním adresáři. V souvislosti s použitím akce -exec jsou nevyhnutelné bezpečnostní problémy; místo toho byste měli použít volbu -execdir.

-execdir příkaz;

Jako -exec, ale zadaný příkaz se spouští z podadresáře obsahujícího odpovídající soubor , což obvykle není adresář, ve kterém jste začali hledat. Toto je mnohem bezpečnější metoda pro vyvolávání příkazů, protože se vyhne konfliktním podmínkám při řešení cest k odpovídajícím souborům. [...] Pokud použijete tuto volbu, musíte zajistit, aby vaše proměnná prostředí $PATH neodkazovala na '.'; v opačném případě může útočník spustit libovolné příkazy, které se mu zlíbí, ponecháním příslušně pojmenovaného souboru v adresáři, ve kterém spustíte -execdir. Totéž platí pro položky v $PATH, které jsou prázdné nebo které nejsou absolutními názvy adresářů.

https://linux.die.net/man/1/find


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

  2. Příkaz Linux:Jak „najít“ pouze textové soubory?

  3. Příkaz 'ls -d' nezobrazuje adresáře. Existuje způsob, jak získat 'ls', aby zobrazoval pouze adresáře namísto souborů a adresářů?

  1. Kopírování souborů a adresářů v Linuxu

  2. Příkaz pro komprimaci více adresářů do jednotlivých souborů ZIP?

  3. Odstraňte pouze soubory v adresáři v adresářích linux NOT

  1. Jak odstranit adresáře a soubory pomocí Linuxu

  2. Najít příkaz v Linuxu (Najít soubory a adresáře)

  3. Linux unzip příkaz:Možnost vynutit přepsání?