Немає.
cp
Команда не має здатності обробляти будь-якого з його аргументів в вигляді регулярних виразів. Навіть макіяжі не обробляються ним (або більшістю виконуваних файлів); скоріше вони обробляються оболонкою.
cp test/* test2/
насправді розширений bash, і все, що cp
дійсно бачить для своїх аргументів, є cp test/file1 test/file2 test/file3 test2/
(або все, що підходить, виходячи з фактичного змісту test/
).
Крім того, я не думаю, що ваш вираз, [^\.php]
буде відповідати тому, що ви хочете (воно не відповідає лише тим файлам, які містять .php
).
Ви, мабуть, хочете заглянути в find
утиліту для фільтрації списку файлів на основі регулярного вираження, а потім використати xargs
для застосування списку повернених файлів до cp
команди (припускаючи, що знахідка не має вбудованого обробника для копіювання файлів; я ' м не дуже знайомий з інструментом).
Ви можете спробувати:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
Це говорить про пошук у поточному каталозі рекурсивно для файлів, які не містять ".php" у шляху, та копіювання в них /destination/folder/
.
Як вимагається, більш конкретна розбивка аргументів:
.
- Місце для початку пошуку - у цьому випадку поточний каталог
!
- Оператор "Не", переверніть результат наступного тесту
-iregex
- Тест регулярної експресії на нечутливий до випадків. Наступний аргумент - вираз.
".*\.php.*"
- Відповідність регулярних виразів <Anything>.php<Anything>
- будь-який файл, який має ".php" десь на шляху. (Зверніть увагу, якщо ви знаходитесь у папці, яка містить ".php" в імені, вам знадобиться більш складний вираз, щоб відповідати лише файлам)
-exec
- Виконайте команду, якщо попередні тести повертають істину. Наступним аргументом є команда, всі решта аргументів до ;
цього передаються команді. {}
це особливий аргумент , який представляє ім'я файлу.
cp
- Команда, що find` повинна виконуватись на кожному зі збігованих імен шляху.
{}
- Шлях до знайденого файлу передається cp
як аргумент, щоб він знав, у який файл скопіювати
/destination/folder/
- переданий аргумент cp
, вказуючи, cp
куди він повинен скопіювати файл.
\;
- Це той ;
термінатор, який -exec
шукають. Ми уникаємо його з \
тим, щоб ваша оболонка не намагалася розібрати її, а замість цього подала як аргумент команді ( find
)
Досить складно написати регулярний вираз, який відповідає "рядкам, яких немає .php
", тому ми замість цього радимо find
шукати рядки, які містять, .php
а потім обернути результати !
.
find . -name [^\.php] -exec cp {} /path/to/location \;
будьте уважні до файлів із спеціальними символами.