PuTTY имеет свой собственный формат файла секретных ключей. Если Вы хотите использовать файл ключей, сгенерированный PuTTYgen, необходимо преобразовать его в формат ключа OpenSSH (который является стандартом на Linux и других системах Unix). Используйте команду экспорта в PuTTYgen.
Вы получите файл ключей, часто называемый id_rsa
(или something.id_rsa
если у Вас есть несколько ключей). Скопируйте тот файл в каталог ~/.ssh
на Вашей машине Linux (~
Ваш корневой каталог). Если Вы называете его ~/.ssh/id_rsa
, это будет взято автоматически, иначе необходимо будет настроить ssh, чтобы использовать правильный ключ или загрузить ключ в агент, оба из которых немного более сложны (и я только знаю, как сделать их из командной строки). Удостоверьтесь что полномочия ~/.ssh
каталог и id_rsa
файл является соответствующим: ~/.ssh
должно быть перезаписываемо только Вами (и должно быть читаемым только Вами); ~/.ssh/id_rsa
должно быть читаемо и перезаписываем только Вами.
Linux, эквивалентный из Театрализованного представления, ssh-agent
или некоторая другая программа брелока для ключей, но это не то, в чем Вы нуждаетесь здесь.
Я бы предложил другой подход, избегая возможных проблем с разбиением слов в ls
#!/bin/bash
shopt -s nullglob
for ext in jpg png gif; do
files=( *."$ext" )
printf 'number of %s files: %d\n' "$ext" "${#files[@]}"
# now we can loop over all the files having the current extension
for f in "${files[@]}"; do
# anything else you like with these files
:
done
done
Вы можете зацикливать массив files
любыми другими командами, которые вы хотите выполнить для файлов каждого конкретного расширения.
Более порционно - или для оболочек, которые не предоставляют массивы явно - вы можете повторно использовать массив позиционных параметров оболочки i. e.
set -- *."$ext"
и затем заменить ${#files[@]}
и ${files[@]}
на $#
и "$@"
Может быть, это может быть короче
exts=( *.jpg *.png *.gif ); printf "There are ${#exts[@]}" extensions;
Мой подход будет:
Вроде того (последний awk
вызов только для форматирования):
ls -q -U | awk -F . '{print $NF}' | sort | uniq -c | awk '{print $2,$1}'
(предполагая, что GNU ls
здесь для опции -U
пропустить сортировку как оптимизацию. Если она не поддерживается, то ее можно безопасно удалить, не затрагивая функциональность).
Все, что связано с ls
, скорее всего, даст неожиданные результаты с помощью специальных символов (пробел и другие символы). Любой башизм (например, массивы) не переносится. Все, что связано с во время чтения
, обычно медленно.
С другой стороны, find
очень гибкий (много опций для фильтрации), он имеет [как минимум] два синтаксиса, которые небезопасны для специальных символов... и он хорошо масштабируется на большом каталоге.
Для этого примера я использовал -iname
, чтобы соответствовать как верхнему, так и нижнему регистру имени расширения. Я также ограничил -maxdepth 1
, чтобы учесть ваш вопрос "в текущем каталоге". Вместо подсчета количества строк, где имена файлов могут включать CR/LF, -print0
выведет NULL байт в конце имени каждого файла... так что | tr -d -c "\000". | wc -l
точно подсчитывает файлы (NULL байт!).
extensions="jpg png gif"
for ext in $extensions; do
c=$(find . -maxdepth 1 -iname "*.$ext" -print0 | tr -d -c "\000" | wc -c)
if [ $c -gt 0 ]; then
echo "Found $c *.$ext files"
find . -maxdepth 1 -iname "*.$ext" -print0 | xargs -0 -r -n1 DOSOMETHINGHERE
# or # find . -maxdepth 1 -iname "*.$ext" -exec "ls" "-l" "{}" ";"
fi
done
P.S. -print0 | tr -d -c "\000". | wc -c
можно заменить на -printf "\000". | wc -c
или даже -printf '\n' | wc -l
.
Это рекурсивно обходит файлы и подсчитывает расширения, которые соответствуют:
$ find . -type f | sed -e 's/.*\.//' | sort | uniq -c | sort -n | grep -Ei '(tiff|bmp|jpeg|jpg|png|gif)$'
6 tiff
7 bmp
26 jpeg
38 gif
51 jpg
54 png
puede usar ls para algo así de simple en mi opinión
ls -l /opt/ssl/certs/*.pem | wc -l
o
count=$(ls -l /some/folder/*.jpg | wc -l)
o
ls *.{mp3,exe,mp4} 2>/dev/null | wc -l
Если вы уверены в расширении, вы можете использовать find
, например
find *.jpeg | wc -l