Os padrões de caractere curinga de nome de arquivo portátil são um pouco limitados. Não há como expressar "todos os arquivos, exceto este".
Com os arquivos mostrados aqui, você pode combinar na primeira letra ~/certificate/[!m]*
(“todos os nomes de arquivos que começam com um caractere que não seja m
”) ou na última letra ~/certificate/*[^r]
.
Se você precisar ajustar a lista de arquivos para copiar portavelmente, use find
. Use -type d -prune
para evitar recursão em subdiretórios.
cd ~/certificates &&
find . -name . -o -type d -prune -o ! -name 'my.war' -name 'other.exception' -exec sh -c 'cp "$@" "$0"' ~/cert {} +
Se você estiver usando o ksh, poderá usar seus padrões de globos estendidos.
cp ~/certificates/!(my.war|other.exception) ~/cert
Você pode usar o mesmo comando no bash se você executar shopt -s extglob
primeiro. Você pode executar o mesmo comando em zsh se executar setopt ksh_glob
primeiro. Em zsh, existe uma sintaxe alternativa: execute setopt extended_glob
, então um dos
cp ~/certificates/^(my.war|other.exception) ~/cert
cp ~/certificates/*~(my.war|other.exception) ~/cert
Como alternativa, use uma ferramenta de cópia com uma lista de exclusão, como pax ou rsync. Pax é recursivo por padrão; você pode usar a opção -d
para copiar diretórios, mas não o conteúdo deles.
rsync --exclude='my.war' --exclude='other.exception' ~/certificates/ ~/cert/
pax -rw -s '!/my\.war$!!' -s '!/other\.exception$!!' ~/certificates/ ~/cert/