Можно использовать усовершенствованные globbing шаблоны в некоторых оболочках для соответствия всем файлам в каталоге за исключением тех, которые соответствуют конкретному шаблону. Например, в ksh, ударе или zsh, команде
shopt -s extglob ## needed in bash only
setopt ksh_glob ## needed in zsh only
mv /source/!(*.bak) /destination
переместит все файлы в /source
кому: /destination
за исключением соответствия файлов *.bak
. В zsh можно также записать /source/^*.bak
если Вы первый показ setopt extended_glob
, и в более общем плане (снова требование setopt extended_glob
) /source/*~*.bak
(или /source/a*~*.bak
для всех файлов, имя которых начинается a
за исключением .bak
файлы, и т.д.).
Zsh имеет массовую команду копии/перемещения/ссылки, которая может использоваться, среди других, для перемещения всех файлов за исключением тех, которые соответствуют шаблону. Например, следующая команда перемещает все файлы кроме *.bak
от /source
кому: target
, и добавляет .bak
к их имени в процессе:
autoload zmv
zmv '/source/(*)~*.bak' '/target/$1.bak'
Существует несколько названных команд rename
плавание вокруг. На Debian и Ubuntu, /usr/bin/rename
сценарий жемчуга, который перемещает файлы в новое имя, сгенерированное выражением жемчуга. Можно исключить файлы из переименования, не генерировав новое имя, если файл должен быть исключен. Например, следующая команда (использующий этот конкретный rename
программа), перемещает все файлы кроме *.bak
от /source
кому: /target
:
rename 's!/source!/target! unless m!\.bak$!' /source/*
Можно использовать find
управляйте для выбора файлов, которые Вы хотите переместить. Например, следующая команда перемещает все регулярные файлы кроме *.bak
в /source
или подкаталог в /target
(обратите внимание, что структура каталогов сворачивается):
find /source -type f \! -name '*.bak' -exec mv {} /target/ \;
или (более эффективный, если существует много файлов для перемещения),
find /source -type f \! -name '*.bak' -exec sh -c 'mv "$@" "$0"' /target/ {} +
rsync
обобщение cp
и scp
с очень мощным включают/исключают правила. Например, следующая команда копирует все файлы кроме *.bak
в /source
или подкаталог в /target
, уважение структуры каталогов:
rsync -a --exclude '*.bak' /source/ /target/
pax
(среди других вещей) другой cp
на стероидах. Его правила исключения совсем не так же мощны как rsync's, но он имеет дополнительную способность переименовать файлы, поскольку они копируются. При переименовании файла к пустой строке это исключено из копии. Например, следующая команда копирует все файлы кроме *.bak
в /source
или подкаталог в /target
, и переименовывает файлы к .bak
мимоходом.
cd /source && pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' . /target/
Пример выше имеет неудачный побочный эффект создания названных каталогов foo.bak
, которого можно избежать путем объединения find
с pax
:
{ cd /source && find . -type f; } | \
pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' /target/
Попытайтесь проверить, что нет никакого dhcpcd, застрявшего в a sudo dhcpcd -k
. Я получаю не соединенные ошибки, когда я сначала использую свой телефон на базе Android w/ограничивающий (за которым я просто работаю sudo dhcpd
вручную) и затем пытающийся использовать Wi-Fi.
Я использовал wicd на Arch в прошлом. Я прекратил использовать его из-за проблем как это. Попробуйте NetworkManager/dhclient.
У меня есть свой ноутбук Linux Arch, подключаются с помощью сценария оболочки. Это для одного из WEP (я знаю, я знаю...), маршрутизаторы, которые я использую:
#!/bin/bash
DEV=$(iw dev | awk '/Interface/ {interf=$2} END {print interf}')
PIDFILE=/var/run/dhcpcd-$DEV.pid
if [[ -f $PIDFILE ]] && kill -0 $(cat /var/run/dhcpcd-$DEV.pid)
then
dhcpcd -k $DEV
fi
ifconfig $DEV down
sleep 1
iwconfig $DEV mode managed
ifconfig $DEV up
iwconfig $DEV channel 1
iwconfig $DEV key 4567ABCDEF
iwconfig $DEV essid 'ACTIONTEC'
iwconfig $DEV ap 00:0d:51:BF:FE:E1
sleep 5
dhcpcd --noarp $DEV
Каждый шаг делает всего одну вещь, таким образом, легко выяснить, где проблема заключается. Ноутбук раньше выполнял Slackware, под которым я записал сценарий, но это, кажется, работает просто великолепно при Arch также.
set -e
наверху сделал бы сбой сценария на первой провальной команде также :)
– Mark K Cowan
24.11.2014, 10:49
sudo dhcpcd
? – l0b0 16.10.2013, 23:44