Как я могу использовать подстановочный знак для соответствия просто файлам, не каталогам?

Вы могли использовать один из следующих вариантов:

Сначала каждый - ipset с типом набора "hash:net".

Второй является цепочкой правила iptables с -j RETURN чтобы каждая сеть пропустила проверку и желаемое действие по умолчанию как последнее цепочечное правило.

Третий должен отметить пакет с некоторым использованием битового флага -j MARK и соответствующее проигрывание флага (с --set-mark, --set-xmark, и т.д.), и затем сделать желаемое действие, если проверка метки удовлетворена (-m mark и --mark). Это - самый универсальный вариант, потому что метка могла быть установлена в одной таблице и зарегистрирована другой. OTOH битовая маска метки ограничена 32 битами, которые могли быть недостаточно для сложных правил.

8
10.03.2015, 01:00
6 ответов

Вы уже близки. Для перемещения файлов home1 , home2 , home3 используйте шаблон глоббинга home? .

mv home? /home/homeLife/

? обозначает любой отдельный символ, в то время как * обозначает любое количество символов (включая ни один).

-121--47700-

Можно использовать sed для обработки файла tbd.txt и создания из него скрипта sed, который удалит строки. Что-то вроде

sed 's=^=/=;s=$=/d=' tbd.txt | sed - file.csv
-121--139651-

С помощью zsh используйте квалификаторы glob:

mv home*(.) dst 

перемещает только обычные файлы.

Пока

mv home*(^/) dst 

перемещает файлы любого типа , кроме каталогов .

mv home*(^-/) dst

также исключают символьные ссылки на каталоги.

8
27.01.2020, 20:09

Вы можете использовать находку. Следующее должно работать.

find . -name home\* -type f -maxdepth 1 -exec mv {} /home/homeLife/. \;
4
27.01.2020, 20:09

Portably вы можете подрезать ваш список спичек глобуса:

set --; cd /home
for f in ./home*
do  [ ! -L "$f" ] && 
      [ -f "$f" ] && 
      set "$@" "$f"
done
[ "$#" -eq 0 ] || mv "$@" ./homeLife
2
27.01.2020, 20:09

Вы можете использовать Bash Extended Globs:

shopt -s extglob                ## activate extglogs if not yet done
mv  home!(*Life) homeLife/      ## !(p1|...) = anything except one of the patt
2
27.01.2020, 20:09

Вы уже близко. Для перемещения ваших файлов домой1, домой2, домой3 используйте шаблон глобуса домой?.

mv home? /home/homeLife/

? обозначает любой одиночный символ, в то время как * обозначает любое количество символов (включая ни одного).

2
27.01.2020, 20:09

Конечно, если бы у вас было только 3 файла, вы могли бы просто сделать

 mv home1 home2 home3 homeLife

Иногда проще сделать что-то вручную, чем читать документацию. Если у вас действительно было большое количество файлов с именем home*, то один трюк, который я использую (, который теперь является частью bash ), состоит в том, чтобы развернуть все совпадения glob, а затем вручную удалить совпадения, которые мне не нужны.. Чтобы развернуть глобус, введите Ctrl + x*после ввода выражения глобуса. Он расширится в командной строке, а затем вы исправите его вручную.

Например, в моем каталоге много «тестовых» файлов, и я хочу преобразовать их все , кроме test2, в новый файл:

cat test*

Теперь введите Ctrl + x *, и он расширится до

cat test test10 test11 test12 test13 test14 test15 test16 test17 test2 test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 test3 test30 test31 test32 test33 test34 test35 test36 test37 test38 test4 test5 test6 test7 test8 test9 testa testb testbuild testc testd teste testf

Затем наведите курсор назад и удалите test2с 5 пробелами, а затем добавьте > test_allв конец командной строки.

cat test test10 test11 test12 test13 test14 test15 test16 test17 test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 test3 test30 test31 test32 test33 test34 test35 test36 test37 test38 test4 test5 test6 test7 test8 test9 testa testb testbuild testc testd teste testf > test_all

Есть куча других фич Ctrl + x , но это единственная, которую я помню.

0
27.01.2020, 20:09

Теги

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