Сценарий оболочки для проверки на присутствие одного или нескольких файлов с определенным расширением?

Согласно Вашей странице установки, brcm80211 драйвер встраивается в ядро. Поэтому modprobe не работает, поскольку нет brcm80211 драйвера, который может быть загруженная (ООН).

Пакет, который Вы установили, содержит встроенное микропрограммное обеспечение не драйвер (поскольку можно читать на странице установки, которую Вы обеспечили).

Так или иначе необходимо сказать brcm80211 драйвер, который является, имеет (новое) встроенное микропрограммное обеспечение, которое он должен использовать. Поскольку modprobe не работает, Вы были бы нуждаться в чем-то еще.

Лично, я не знаю, как перезапустить встроенный драйвер ядра... Ожидайте jsut перезапуск ядра (т.е. перезапуск Вашей машины)...

Надо надеяться, это поможет Вам понять вещи немного больше.

4
21.08.2013, 01:34
5 ответов

Если Вы не хотите рекурсии, можно сделать

export DIR=/home/Savio/Dsktop/check
if ls ${DIR}/*.txt &>/dev/null && ls ${DIR}/*.csv &>/dev/null
then
    echo "Found."
else
    echo "Not found."
fi

Или, в perl:

perl -e '
    $DIR="/home/Savio/Dsktop/check";
    @a= glob "${DIR}/*.txt";
    @b= glob "${DIR}/*.csv"; 
    print  @a && @b ? "Found.\n" : "Not found.\n"
' 

Если Вы действительно захотите рекурсию, то решение, предложенное в других ответах, будет работать. Можно заставить его пойти быстрее путем создания find остановитесь после первого соответствия это находит:

export DIR=/home/Savio/Dsktop/check
CSV=$(find "$DIR" -name *.csv|head -n1)
TXT=$(find "$DIR" -name *.txt|head -n1)
[ ! -z "$CSV" ] && [ ! -z "$TXT" ] && echo Found || echo Not found

Ссылки

1
27.01.2020, 20:54

Подстановочный знак в file1 никогда не расширяется, потому что это всегда находится в кавычках.

В ударе один путь состоит в том, чтобы установить nullglob опция так, чтобы подстановочный знак, который не соответствует никакому файлу, расширился до пустого списка.

#!/bin/bash
shopt -s nullglob
csv_files=(/home/Savio/Dsktop/check/*.csv)
txt_files=(/home/Savio/check/*.txt)
if ((${#csv_files[@]} && ${#txt_files[@]}))
then
  echo " found."
else
  echo "not found."
fi

Если Вы хотите соответствовать точечным файлам также, установите dotglob опция.

Только с оболочкой POSIX необходимо справиться с шаблоном, остающимся неизменными, если там не идет ни в какое сравнение.

matches_exist () {
  [ $# -gt 1 ] || [ -e "$1" ]
}
if matches_exist /home/Savio/Dsktop/check/*.csv &&
   matches_exist /home/Savio/check/*.txt; then
  echo " found."
else
  echo "not found."
fi

Обратите внимание, что это ищет файлы независимо от их типа (регулярный, каталог, символьная ссылка, устройство, канал...) в то время как Ваш [[ -f file ]] проверки, существует ли файл и является регулярным файлом или символьной ссылкой на регулярный файл только (исключили бы каталоги, устройства...).

2
27.01.2020, 20:54

find вероятно, работал бы лучше здесь.

csv=$(find /home/Savio/Dsktop/check -type f -name "*.csv")
txt=$(find /home/Savio/check/ -type f -name "*.txt")

То, что Вы имеете, не рекурсивно вызовет в подкаталоги.

1
27.01.2020, 20:54

Знайте это if [[ -f "$file" ]] перестанет работать если $file содержит больше чем одно имя файла - который, вероятно, произойдет, когда Вы выберете файл с помощью подстановочного знака.

Необходимо или проверить на определенное имя файла (без любых подстановочных знаков) или использовать подход и проверку Petey T если количество файлов, найденных find больше, чем 0:

csv=$(find /home/Savio/Dsktop/check -type f -name "*.csv")
txt=$(find /home/Savio/check/ -type f -name "*.txt")
if [[ ( -n $csv ) -a ( -n $txt ) ]]
then
    echo "found"
else
    echo "not found"
fi
1
27.01.2020, 20:54
  • 1
    На самом деле подстановочные знаки не расширены в шарики внутри [[ посмотрите, что wiki –  Joseph R. 20.08.2013, 20:02
  • 2
    Сделать Ваш if совместимое POSIX условие, можно сделать if [ ! -z $csv ] && [ ! -z $txt ]... –  Joseph R. 20.08.2013, 20:23
  • 3
    не расширены внутри [[, но подстановочный знак будет расширен, когда файл и file1 будут установлены. –  doneal24 20.08.2013, 20:42
  • 4
    Вы. Мое плохое... –  Joseph R. 20.08.2013, 20:46

bash-скрипт для проверки существования CSV-файлов и цикла for для всех существующих

#!/bin/bash
# count variable to check if csv files exists in current directory
count_file=`ls -1 *.flac 2>/dev/null | wc -l`
if [ $count_file != 0 ]
then 
  for file in *.csv; do
    echo ${file##*/}
  done
fi 
1
27.01.2020, 20:54

Теги

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