Файлы количества в каталоге следовательно

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 или некоторая другая программа брелока для ключей, но это не то, в чем Вы нуждаетесь здесь.

15
03.06.2019, 18:43
8 ответов

Я бы предложил другой подход, избегая возможных проблем с разбиением слов в 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[@]} на $# и "$@"

14
27.01.2020, 19:49

Может быть, это может быть короче

exts=( *.jpg *.png *.gif ); printf "There are ${#exts[@]}" extensions;
3
27.01.2020, 19:49

Мой подход будет:

  1. Перечислить все файлы в каталоге
  2. Распаковать их расширение
  3. Сортировать результат
  4. Посчитать вхождения каждого расширения

Вроде того (последний awk вызов только для форматирования):

ls -q -U | awk -F . '{print $NF}' | sort | uniq -c | awk '{print $2,$1}'

(предполагая, что GNU ls здесь для опции -U пропустить сортировку как оптимизацию. Если она не поддерживается, то ее можно безопасно удалить, не затрагивая функциональность).

23
27.01.2020, 19:49

Все, что связано с 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.

3
27.01.2020, 19:49
find -type f | sed -e 's/.*\.//' | sort | uniq -c
6
27.01.2020, 19:49

Это рекурсивно обходит файлы и подсчитывает расширения, которые соответствуют:

$ 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
19
27.01.2020, 19:49

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
0
27.01.2020, 19:49

Если вы уверены в расширении, вы можете использовать find, например

find *.jpeg | wc -l
-1
27.01.2020, 19:49

Теги

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