В вашем вопросе не говорится, откуда берутся предыдущие заведомо хорошие значения. Я предполагаю, что у вас есть дерево, параллельное дереву содержимого
, которое называется ../ oldcontent
. Подгоните под себя:
#!/bin/bash
echo "Checking directories for proper extensions"
for d in documents media pictures other
do
nfc=$(find content/$d -type f | wc -l)
ofc=$(find ../oldcontent/$d -type f | wc -l)
if [ $nfc -eq $ofc ]
then
echo The "$d" directory has as many files as before.
elif [ $nfc -lt $ofc ]
then
echo There are fewer files in the content directory than before.
else
echo There are more files in the content directory than before.
fi
done
Этот код намного короче, потому что он не пытается давать разные команды find
для каждого цикла. Если вам это действительно нужно, вы можете использовать ассоциативный массив для объединения имен каталогов и найти
аргументы:
declare -A dirs=(
[documents]="-name \*.txt -o -name \*.doc -o -name \*.docx"
[media]="-name \*.gif"
[pictures]="-name \*.jpg -o -name \*.jpeg"
[other]=""
)
Тогда цикл for
станет:
for d in "${!dirs[@]}"
do
nfc=$(find content/$d -type f ${dirs[$d]} | wc -l)
ofc=$(find ../oldcontent/$d -type f ${dirs[$d]} | wc -l)
...
Однако это работает только в Bash 4 и выше. В Bash 3 есть менее мощный механизм ассоциативных массивов, но он в значительной степени нарушен конструкцией. Если у вас под рукой нет Bash 4, я бы посоветовал вам переключиться на что-то вроде Perl, Python или Ruby, а не пытаться использовать ассоциативные массивы Bash 3 для чего-то вроде этого.
Помните, что это не означает, что дерево содержимого
содержит те же файлы, что и ../ oldcontent
, только то, что в каждом подкаталоге есть одинаковое количество файлов. Если вы пытаетесь обнаружить изменения в файлах в каждом дереве, вам необходимо использовать rsync
или мое решение « MD5 a directory » здесь, на Unix.SE.
Для этого я бы написал функцию:
s() {
ssh "really-really-long-hostname$1"
}
Затем назовите его так:
s 10037
Дополнительная литература:
Отредактируйте файл ~ / .ssh / config
и добавьте такие записи для каждого хоста:
Host myhostN
HostName really-really-long-hostname100N
Установите права доступа к этому файлу на 0600:
chmod 0600 ~/.ssh/config
Затем вы сможете использовать myhostN
с ssh
связанными командами ( sftp
, scp
и т. Д.) Вместо действительно-действительно-длинное-имя-хоста100N
.
Я решил это так:
Отредактируйте локальный файл / etc / hosts
.
Добавьте IP и имя вроде этого
216.58.211.14 my.google0
216.58.211.3 mygoogle1
.. в оболочке
ping mygoogle1
ssh my.google0
будет работать на локальной машине
Другой способ - использовать псевдонимы.
~ / .bashrc
alias ssh1='ssh -2 somehost.foo -l bar'
в следующий раз, когда bash будет запущен, вы подключитесь, набрав ssh1
.