Ne.
cp
příkaz nemá schopnost zpracovat žádný ze svých argumentů jako regulární výrazy. Dokonce ani zástupné znaky nezpracovává (nebo většina spustitelných souborů); spíše je ovládá shell.
cp test/* test2/
je ve skutečnosti rozšířen o bash a to vše cp
opravdu vidí, že jeho argumenty jsou cp test/file1 test/file2 test/file3 test2/
(nebo cokoli, co je vhodné na základě skutečného obsahu test/
).
Také si nemyslím, že váš výraz, [^\.php]
, bude odpovídat tomu, co chcete (neodpovídá pouze souborům, které obsahují .php
).
Pravděpodobně se budete chtít podívat do find
k odfiltrování seznamu souborů na základě regulárního výrazu a poté použijte xargs
aplikujte vrácený seznam souborů na cp
příkaz find (předpokládám, že find nemá vestavěný obslužný program pro kopírování souborů; tento nástroj důvěrně neznám).
Můžete zkusit:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
To říká, že se má v aktuálním adresáři rekurzivně vyhledat soubory, které v cestě neobsahují ".php" a zkopírovat je do /destination/folder/
.
Jak bylo požadováno, specifičtější rozdělení argumentů:
.
- Místo pro zahájení vyhledávání – v tomto případě aktuální adresář!
- Operátor "Ne", invertujte výsledek dalšího testu-iregex
- Test regulárního výrazu bez rozlišení velkých a malých písmen. Dalším argumentem je výraz.".*\.php.*"
- Regulární výraz odpovídající<Anything>.php<Anything>
- Jakýkoli soubor, který má někde v cestě ".php". (Poznámka, včetně umístění ve složce, která obsahuje v názvu „.php“, budete potřebovat složitější výraz, aby odpovídal pouze souborům)-exec
- Proveďte příkaz, pokud předchozí testy vrátí hodnotu true. Dalším argumentem je příkaz, všechny zbývající argumenty až do;
jsou předány příkazu.{}
je speciální argument představující název souboru.cp
- Příkaz, který find` by měl běžet na každém z odpovídajících názvů cest.{}
- Cesta k nalezenému souboru předaná nacp
jako argument, aby věděl, jaký soubor zkopírovat/destination/folder/
- argument předán docp
, oznamujícícp
kam má soubor zkopírovat.\;
- Toto je;
terminátor, který-exec
hledá. Escape to pomocí\
aby se to váš shell nepokoušel analyzovat a místo toho to uvedl jako argument příkazu (find
)
Je poměrně obtížné napsat regulární výraz, který odpovídá "řetězcům, které nemají .php
", takže místo toho řekneme find
k vyhledání řetězců, které dělají obsahovat .php
a poté invertujte výsledky pomocí !
.
Můžete použít několik dalších nástrojů z konzole, jako jsou grep a xargs.
ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder