Linux проверка есть ли файл

Содержание
  1. Как проверить, существует ли файл или каталог в Bash
  2. Проверьте, существует ли файл
  3. Проверить, существует ли каталог
  4. Проверьте, не существует ли файла
  5. Проверьте, существует ли несколько файлов
  6. Операторы проверки файлов
  7. Выводы
  8. bash. Kak проверить наличие в каталоге определенных файлов.
  9. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  10. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  11. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  12. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  13. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  14. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  15. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  16. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  17. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  18. Re: bash. Kak проверить наличие в каталоге определенных файлов.
  19. Как проверить, существует ли файл или каталог в Bash
  20. How to Check if a File or Directory Exists in Bash
  21. В Bash вы можете использовать тестовую команду, чтобы проверить, существует ли файл и определить тип файла.
  22. Проверьте, существует ли файл
  23. Проверьте, существует ли каталог
  24. Проверьте, не существует ли файл
  25. Проверьте, существует ли несколько файлов
  26. Операторы проверки файлов
  27. Вывод
  28. Блог системного администратора Windows/Linux/FreeBSD
  29. Shell-скрипт с условием проверки наличия файла для Linux/FreeBSD
  30. Похожие записи:
  31. Shell-скрипт с условием проверки наличия файла для Linux/FreeBSD : 8 комментариев

Как проверить, существует ли файл или каталог в Bash

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

В Bash вы можете использовать команду test, чтобы проверить, существует ли файл, и определить тип файла.

Команда test принимает одну из следующих синтаксических форм:

Если вы хотите, чтобы ваш сценарий был переносимым, вам следует предпочесть старую команду test [ , которая доступна во всех оболочках POSIX. Новая обновленная версия тестовой команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

Проверьте, существует ли файл

При проверке существования файла наиболее часто используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (а не каталогом или устройством).

Наиболее удобочитаемый вариант при проверке существования файла — использование команды test в сочетании с оператором if . Любой из приведенных ниже фрагментов проверит, существует ли файл /etc/resolv.conf :

Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if / then:

Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода тестовой команды — истина,

Если вы хотите запустить серию команд после оператора && просто заключите команды в фигурные скобки, разделенные ; или && :

Напротив && , оператор после || Оператор будет выполняться только в том случае, если статус выхода тестовой команды false .

Проверить, существует ли каталог

Операторы -d позволяют вам проверить, является ли файл каталогом или нет.

Например, чтобы проверить, существует ли каталог /etc/docker вы должны использовать:

Вы также можете использовать двойные скобки [[ вместо одинарной [ .

Проверьте, не существует ли файла

Как и во многих других языках, тестовое выражение может быть отменено с помощью ! (восклицательный знак) оператор логического НЕ:

То же, что и выше:

Проверьте, существует ли несколько файлов

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:

Эквивалентные варианты без использования оператора IF:

Операторы проверки файлов

Команда test включает в себя следующие операторы FILE, которые позволяют проверять файлы определенных типов:

  • -b FILE — Истина, если ФАЙЛ существует и является специальным блочным файлом.
  • -c FILE — Истина, если ФАЙЛ существует и является файлом специальных символов.
  • -d FILE — Истина, если ФАЙЛ существует и является каталогом.
  • -e FILE — Истина, если ФАЙЛ существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
  • -f FILE — Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
  • -G FILE — Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
  • -h FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -g FILE — Истина, если ФАЙЛ существует и для него установлен флаг set-group-id ( sgid ).
  • -k FILE — Истина, если ФАЙЛ существует и для него установлен флаг липкого бита.
  • -L FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -O FILE — Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
  • -p FILE — Истина, если ФАЙЛ существует и является каналом.
  • -r FILE — Истинно, если ФАЙЛ существует и доступен для чтения.
  • -S FILE — Истина, если ФАЙЛ существует и является сокетом.
  • -s FILE — Истина, если ФАЙЛ существует и имеет ненулевой размер.
  • -u FILE — Истинно, если ФАЙЛ существует и установлен флаг set-user-id ( suid ).
  • -w FILE — Истина, если ФАЙЛ существует и доступен для записи.
  • -x FILE — Истина, если ФАЙЛ существует и является исполняемым.
Читайте также:  Как указать дистрибутив windows

Выводы

В этом руководстве мы показали вам, как проверить, существует ли файл или каталог в Bash.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

bash. Kak проверить наличие в каталоге определенных файлов.

Требуется в скрипте проверять наличие в каталоге определенных файлов. Т.е. если в каталоге появились например файлы *.mp3, то перекодировать их в ogg и перемещать в каталог с музыкой. Если файлов нет, то просто завершать работу. Как более просто решить эту задачу.

В bash я не силен — натолкните на путь истинный. Я предполагаю засунуть в cron скрипт который будет периодически выполнять эту работу.

p.s. сейчас сделано так

for name in *.mp3

do mp32ogg —delete $name

Как еще это можно сделать? интересуют разные способы.

Re: bash. Kak проверить наличие в каталоге определенных файлов.

Re: bash. Kak проверить наличие в каталоге определенных файлов.

А зачем что-то усложнять? Единственное замечание — mp32ogg —delete «$name»

Чтобы файлы с пробелами корректно перекодировались.

Re: bash. Kak проверить наличие в каталоге определенных файлов.

Спасибо. пробовал вчера также конструкцию [ -f /path/*.mp3 ] но скорее всего под вечер накосячил, ибо у меня не работало так как я хотел.

по поводу замечания — «$name» — спасибо — учту.

Re: bash. Kak проверить наличие в каталоге определенных файлов.

Я правильно понимаю, что [ ххххх ] это сокращение от test ххххх ??

Re: bash. Kak проверить наличие в каталоге определенных файлов.

Re: bash. Kak проверить наличие в каталоге определенных файлов.

find /where/to -type f -name «*.mp3» -exec mp32ogg —delete «<>» \;

Re: bash. Kak проверить наличие в каталоге определенных файлов.

а какой смысл перекодировать mp3 в ogg? греться у компа холодними зимними вечерами?

Re: bash. Kak проверить наличие в каталоге определенных файлов.

>а какой смысл перекодировать mp3 в ogg? греться у компа холодними зимними вечерами?

За _свободу_ до конца!

Re: bash. Kak проверить наличие в каталоге определенных файлов.

смысл сейчас объясню. Перекодированные файлы добавляются в плейлист ices и далее вещание в локальную сеть через icecast. Поэтому ухудшение качества меня не сильно беспокоит.

Читайте также:  Форматирование диска с windows 10 для линукс

Re: bash. Kak проверить наличие в каталоге определенных файлов.

Так. хочу внести некоторые усовершенствования в скрипт. Он у меня сейчас запускается по cron-у один раз в 15 минут, так как машина очень слабая P-MMX, перекодирование идет медленно, и если закинуть в каталог сразу много файлов я предполагаю возникнет следующая ситуация: файлы еще до конца не перекодировались и не удалились из каталога, а скрипт запущен еще раз, что приведет в конечном счете к зависону.

Хочу ввести еще одну проверку. Т.е. мне надо определить закончил ли работу скрипт (идет ли в данный момент перекодирование mp3 в ogg), и в случае если перекодировка еще не закончена, завершить работу скрипта.

Каким образом это организовать? Наверное можно анализировать

ps -A | grep mp32ogg

Как сделать такую проверку? Если можно — разные варианты, т.к. как я уже писал выше в bash я не особенно силен и хочу посмотреть различные пути решения.

Источник

Как проверить, существует ли файл или каталог в Bash

How to Check if a File or Directory Exists in Bash

В Bash вы можете использовать тестовую команду, чтобы проверить, существует ли файл и определить тип файла.

Во многих случаях при написании сценариев Shell вы можете оказаться в ситуации, когда вам нужно выполнить действие, основанное на том, существует файл или нет.

Команда test принимает одну из следующих синтаксических форм:

Если вы хотите, чтобы ваш скрипт был переносимым, вам следует использовать старую [ команду test , которая доступна во всех оболочках POSIX. Новая обновленная версия команды test [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

Проверьте, существует ли файл

При проверке существования файла чаще всего используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от его типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (не каталогом или устройством).

Наиболее читаемым вариантом при проверке существования файла является использование test команды в сочетании с if оператором . Любой из фрагментов ниже проверит, /etc/resolv.conf существует ли файл:

Вы также можете использовать команду test без оператора if. Команда после && оператора будет выполнена только в том случае, если статус выхода тестовой команды равен true,

Напротив && , оператор после || оператора будет выполняться только в том случае, если статус выхода команды test равен false .

Проверьте, существует ли каталог

Операторы -d позволяют проверить, является ли файл каталогом или нет.

Например, чтобы проверить, /etc/docker существует ли каталог, вы должны использовать:

Вы также можете использовать двойные скобки [[ вместо одной [ .

Проверьте, не существует ли файл

Как и во многих других языках, тестовое выражение можно отменить, используя ! логический оператор not (восклицательный знак):

То же, что и выше:

Проверьте, существует ли несколько файлов

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:

Операторы проверки файлов

Команда test включает в себя следующие операторы FILE, которые позволяют вам тестировать определенные типы файлов:

  • -b FILE — Истина, если ФАЙЛ существует и является специальным файлом блока.
  • -c FILE — Истина, если ФАЙЛ существует и является файлом специальных символов.
  • -d FILE — Истина, если ФАЙЛ существует и является каталогом.
  • -e FILE — Истина, если ФАЙЛ существует и является файлом, независимо от его типа (узел, каталог, сокет и т. Д.).
  • -f FILE — Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
  • -G FILE — Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
  • -h FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -g FILE — Истина, если ФАЙЛ существует и установлен sgid флаг set -group-id ( ).
  • -k FILE — Истина, если ФАЙЛ существует и установлен флаг закрепления битов.
  • -L FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -O FILE — Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
  • -p FILE — Истина, если ФАЙЛ существует и является каналом.
  • -r FILE — Истина, если ФАЙЛ существует и доступен для чтения.
  • -S FILE — Истина, если ФАЙЛ существует и является сокетом.
  • -s FILE — Истина, если ФАЙЛ существует и имеет ненулевой размер.
  • -u FILE — Истина, если ФАЙЛ существует и установлен suid флаг set-user-id ( ).
  • -w FILE — Истина, если ФАЙЛ существует и доступен для записи.
  • -x FILE — Истина, если ФАЙЛ существует и является исполняемым.
Читайте также:  Эта общая папка работает по устаревшему протоколу smb1 windows 10 домен

Вывод

В этом руководстве мы показали, как проверить, существует ли файл или каталог в Bash.

Источник

Блог системного администратора Windows/Linux/FreeBSD

Shell-скрипт с условием проверки наличия файла для Linux/FreeBSD

Представлю вам скрипт, который архивирует файл, если он есть в заданной директории. Если файла нет — архив не создается.

Остальные ключи проверки файлов/каталогов:

Второй вариант bash-скрипта для проверки условия существования файлов и их архивирования при наличии:

Третий вариант проверки условия существования любых файлов в каталоге:

#Задаем переменную директории
DIR=/000/test/test

#вычисляем количество файлов, которые есть в заданной директории
filecount=`find $DIR -type f | wc -l`

#если количество файлов равно нулю, то есть их нет, то выдается сообщение
if [ $filecount -eq 0 ];
then
echo «Файлов нет, выполняем скрипт дальше»
else
echo «Есть файлы, прекращаем работу скрипта» && exit
fi

Четвертый вариант проверки условия существования любых файлов в каталоге с бесконечным циклом:

while true
do
case `find $DIR -type f | wc -l` in
0 ) echo «no file» ;; #Если файлов нет — выводится сообщение (или можно подставить любой ваш скрипт или команду)
* ) sleep 5 ;; #если файлы в каталоге есть — ждем 5 секунд и дальше проверяем по-новому (к первому шагу)
esac
done
exit 0

Похожие записи:

Shell-скрипт с условием проверки наличия файла для Linux/FreeBSD : 8 комментариев

Подскажите, а как будет выглядеть скрипт, который не даст дальнейшее выполнение основного скрипта, пока в указанном каталоге присутствуют файлы (любые), с любым именем и расширением?

Алексей, я добавил в статью вариант под вашу нужду. Пойдет?

Третий вариант, я думаю тоже возьму на заметку, но
если можно покажите пример, в котором бы
был как я понимаю бесконечный цикл проверки на наличия файлов.

То есть почти как третий вариант, только если файлы есть, то работа скрипта не прекращалась вообще, а допустим был бы sleep 5 и после него проверка повторялась и так до тех пор пока каталог не будет пустым и только тогда пойдёт выполнение скрипта далее.

Четвертый вариант пойдет? Я проверил — работает так, как вам нужно, если я правильно понял.

То что надо!
Спасибо

Не могу понять, пишу это на роутере.
Под sh выполняется всё корректно find $DIR -type f | wc -l,
а когда сам роутер выполняет эту команду, то почему то
она всё время пишет ноль файлов в каталоге, хотя они там есть.

Если быть точнее, то пишу скрипт:

filecount=`find /opt/var/spool/sms/failed/ -type f | wc -l`
echo -e $filecount >> /tmp/status

если данный скрипт выполнить под ssh, то всё ок, а если
его выполняет cron, то всё время получаю ноль.

Вроде разобрался, указал до команды find полный путь.

Источник

Оцените статью