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

Я не знаю, существуют ли ресурсы онлайн, но локальные тесты прекрасен, например, с kiki

enter image description here

Это поможет Вам узнать о regex.

Пакет доступен в Ubuntu / репозиторий Arch, чтобы установить его, сделать:

apt-get install -y kiki

Или pacman -S kiki-re на Arch.

3
18.10.2013, 00:32
3 ответа

Портативные подстановочные шаблоны имени файла несколько ограничены. Нет никакого способа выразить “все файлы кроме этого”.

С файлами Вы показали здесь, Вы могли соответствовать на первой букве ~/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 можно использовать его расширенные шаблоны шарика.

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

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

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

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

rsync --exclude='my.war' --exclude='other.exception' ~/certificates/ ~/cert/

pax -rw -s '!/my\.war$!!' -s '!/other\.exception$!!' ~/certificates/ ~/cert/
2
27.01.2020, 21:17

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

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

Я обычно делаю что-то вроде этого для проверения моих шариков оболочки.

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

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

Сопоставление с образцом

Средство в Bash, который делает сопоставление с образцом, вполне прилично документируется в страницу справочника Bash в названном разделе: "Сопоставление с образцом".

2
27.01.2020, 21:17
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 . от того, чтобы быть интерпретируемым оболочкой.

1
27.01.2020, 21:17
  • 1
    . не интерпретируется оболочкой без кавычек, они ничего не делают здесь. . не специальный символ в оболочке globbing. средства –  Chris Down 17.10.2013, 09:20

Теги

Похожие вопросы