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

Простой: вручите локальный каталог с чем-то как SimpleHTTPServer, затем пере -wget от localhost с подходящими вариантами.

3
01.03.2012, 17:57
3 ответа

$(...) является очевидно передающим "Edie, -, и Realities.txt" как разделяют аргументы. Необходимо заключить в кавычки $(...) как любой другой $variable, и Вы, вероятно, хотите удалить "s.

[ -f "$(cat input.txt | grep FILE | sed 's/^.*"\(.*\)".*$/\1/')" ] && echo "exist" || echo "does not exist"
2
27.01.2020, 21:10

Необходимо заключить аргумент в кавычки -f - если Вы работаете с set -x Вы видели бы, что команда быть выполненной [ -f '"Edie' '-' 'Realities.txt"' ] который является слишком многими аргументами.

[ -f "$(sed -e '/FILE/!d' -e 's/FILE "\([^"]*\).*/\1/' input.txt)" ]

Если у Вас есть GNU grep в Вашей системе, можно использовать:

[ -f "$(grep -Po '(?<=FILE ").*(?=")' input.txt)" ] 
9
27.01.2020, 21:10

Для Вашего содержания файла

FILE "/path_to_file/filename" TXT

сделайте что-то как

grep FILE  input.txt | while read line 
  do
    fname=`echo $line | awk -F\" '{print $2}'`  # this separates the line by the quotes
                                                # result is like /path_to_file
    echo $fname # just to check it 
    if [ -f $fname ]
    then
      ls -l $fname
      echo "file exists"
    else
      echo "no file there $file"
    fi
  done
-1
27.01.2020, 21:10
  • 1
    , Вы упустили критическую суть это $fname должен быть в двойных кавычках. Остальная часть Вашего кода не особенно полезна здесь. –  Gilles 'SO- stop being evil' 02.03.2012, 01:04

Теги

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