копирование определенных файлов в каталог

Я пытаюсь скопировать некоторые из файлов в каталог. Каталог содержит следующие файлы

мой текущий каталог ~ / certificate /

drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 16 11:58 apache -rw-rw-r-- 1 ubuntu ubuntu 5812 Oct 16 11:20 apache.keystore -rw-rw-r-- 1 ubuntu ubuntu 1079 Oct 16 08:31 csr.txt -rwxr-xr-x 1 ubuntu ubuntu 36626564 Oct 16 10:08 my.war drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 16 09:39 tomcat -rw-rw-r-- 1 ubuntu ubuntu 6164 Oct 16 09:31 tomcat.keystore 

Я хочу скопировать все файлы в ~ / certs / except my.war. Я пробовал команду без успеха. Я не хочу перемещать my.war из папки даже временно.

 cp -r ~/certificate/(?!m)* ~/cert/. 

Пожалуйста, помогите мне с подходящим регулярным выражением или любым другим инструментом.

3 Solutions collect form web for “копирование определенных файлов в каталог”

Паттерны шаблонов переносимых файлов несколько ограничены. Невозможно выразить «все файлы, кроме этого».

С показанными здесь файлами вы можете сопоставлять первую букву ~/certificate/[!m]* («все имена файлов, начинающиеся с символа, который не является m »), или на последней букве ~/certificate/*[^r] .

Если вам нужно точно настроить список файлов для копирования переносимо, вы можете использовать find . Используйте -type d -prune чтобы избежать рекурсии в подкаталоги.

 cd ~/certificates && find . -name . -o -type d -prune -o ! -name 'my.war' -name 'other.exception' -exec sh -c 'cp "$@" "$0"' ~/cert {} + 

Если вы используете ksh, вы можете использовать расширенные шаблоны glob.

 cp ~/certificates/!(my.war|other.exception) ~/cert 

Вы можете использовать ту же команду в bash, если shopt -s extglob запустите shopt -s extglob . Вы можете запустить ту же команду в zsh, если setopt ksh_glob запустите setopt ksh_glob . В zsh существует альтернативный синтаксис: run setopt extended_glob , затем один из

 cp ~/certificates/^(my.war|other.exception) ~/cert cp ~/certificates/*~(my.war|other.exception) ~/cert 

В качестве альтернативы используйте инструмент копирования с списком исключений, например, pax или rsync. По умолчанию Pax рекурсивно; вы можете использовать опцию -d для копирования каталогов, но не их содержимого.

 rsync --exclude='my.war' --exclude='other.exception' ~/certificates/ ~/cert/ pax -rw -s '!/my\.war$!!' -s '!/other\.exception$!!' ~/certificates/ ~/cert/ 

Вы можете использовать эту команду:

 $ cp -R ~/certificate/[act]* ~/certs/. 

Обычно я делаю что-то подобное, чтобы проверить свои оболочки.

 $ echo certificate/[act]* certificate/apache certificate/apache3.keystore certificate/csr.txt certificate/tomcat certificate/tomcat.keystore 

Шаблоны оболочки не являются регулярными выражениями, я считаю, что они называются шаблонами.

Согласование образцов

Объект в Bash, который выполняет сопоставление с образцом, хорошо документирован на странице руководства Bash в разделе под названием «Match Matching» .

 find ~/certificates -type d -name '*' -exec mkdir -p ~/certs/{} \; 

перемещать каталоги

 find ~/certificates ! -filetype f ! -name "my.war" -exec cp "{}" ~/cert \; 

переместите файлы, но не ( ! ) те, которые названы ( -name ) my.war ( "my.war" ), с кавычками вокруг my.war, предотвращающими . от интерпретации оболочки.

  • Разделение столбцов и представление значения как stdin в отдельную программу в скрипте
  • Сценарий справки - если grep "Используется: X GB"> Y, тогда
  • Сценарий оболочки не работает, чтобы открыть LimeChat через терминал
  • Идентификация повторяющихся полей и УДАЛЕНИЕ обоих с awk
  • Может ли команда «at» выполнить любой скрипт оболочки?
  • Убивание фонового процесса в скрипте bash при выходе из скрипта
  • Как передать список переменных в sed в функции оболочки
  • sed: захват и замена всех данных между последней обратной косой чертой и запятой
  • назначить комбинацию клавиш для запуска скрипта
  • Первая строка сценария
  • Выполнять команды по отключению tmux
  • Linux и Unix - лучшая ОС в мире.