Исключить из * в командной строке

В терминале Ubuntu попробуйте использовать это с помощью wget

wget -r -i http://XXXX/XXX/XX

. Но если у вас есть определенный тип файла, тогда

wget -r -l1 -A.txt https://xxxx/pub/data/xx/products/xx/2012/

.txt является расширением файла

1
задан 6 August 2013 в 13:39

2 ответа

Я построил, за исключением того, что для этого (sry, что я еще не смог добавить документацию).

У меня есть папка, такая как:

$ ls
a b c d
[d3 ] Ввод except b d даст вам a и c

$ except b d
ac

Теперь вы можете передать это на rm.

except b d | xargs -0 rm

Это может быть трудно помните, так почему бы просто не построить сценарий поверх, кроме, называемый rm-except:

#!/usr/bin/env bash

except "$@" | xargs -0 rm

Аналогично легко ls-except:

#!/usr/bin/env bash

except "$@" | xargs -0 ls
4
ответ дан 24 May 2018 в 19:19

В качестве альтернативы extglob (хотя это очень хороший ответ, и каждый должен иметь shopt -s extglob globstar в своем .bashrc), вы можете использовать глобальную переменную $ GLOBIGNORE. Предположим, вы хотите получить каждый файл, кроме «foo.txt» и «bar baz.txt»:

GLOBIGNORE=foo.txt:'bar baz.txt'

... однако это приведет к включению опции оболочки dotglob, что означает что * будет соответствовать файлам, начинающимся с точки (которые обычно скрыты). Таким образом, вам понадобятся две команды:

GLOBIGNORE=foo.txt:'bar baz.txt'
shopt -u dotglob

Поскольку это глобальная переменная, она будет влиять на каждый глобус, который вы используете, до тех пор, пока $ GLOBSTAR не будет отменен ни путем выхода из системы, ни с помощью

GLOBIGNORE=

Он также будет работать только с литеральными строками, переданными переменной. Вы можете понять, что я имею в виду, установив $ GLOBIGNORE и посмотрев разницу между этими командами:

printf '%s\n' *
printf '%s\n' ./*
1
ответ дан 24 May 2018 в 19:19

Другие вопросы по тегам:

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