Простой bash-скрипт для определения, находится ли файл в каталоге - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь выяснить в bash, как просто показать, что аргумент, который является файлом, находится в другом аргументе, который является каталогом, и затем удалить файл, если он есть.Я думал о том, чтобы установить переменную на $(dirname $file) и затем сравнить ее с именем каталога, но я не уверен, что это правильное направление для ответа на этот вопрос.или я бы сделал ls из каталога и каким-то образом сопоставил бы это с файлом?

Ответы [ 4 ]

3 голосов
/ 30 ноября 2011

Вы можете использовать if и test: -

file="somedir/somefile.txt"
if test -f $file
then
   echo "file exist"
fi

Пример: - http://en.wikipedia.org/wiki/Test_(Unix)

1 голос
/ 30 ноября 2011

Как уже говорилось, вопрос несколько двусмысленный. Для меня не совсем ясно, какой файл из этих двух должен быть удален. При дальнейшем размышлении, я думаю, что если файл существует в удаленном каталоге, имя файла, как указано, должно быть удалено. Что приводит к этому сценарию, я считаю:

filename="$1"
dirname="$2"
basename=$(basename "$filename")
pathname="$dirname/$filename"
if [ -f "$pathname" ]
then rm -f "$filename"
fi

Вы можете проверить, является ли "$dirname" каталогом; однако, если это не каталог, то путь, основанный на нем, не будет файлом (поэтому проверка на то, что он является файлом, будет неудачной), поэтому проверка каталога будет излишней, если вам не требуется информативное сообщение об ошибке. 1005 *

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

0 голосов
/ 30 ноября 2011

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

Так что я рекомендую это решение (читайте ссылку для поиска реального пути)

#!/bin/bash

file="$(readlink -f $1)"   # file is the first argument of teh script
dir="$(readlink -f $2)"    # dir is the secong argument of the script

[[ -e "$dir/$file" ]] && rm -f "$dir/$file" # shortcut to rm the file if the test case is true
0 голосов
/ 30 ноября 2011

Посмотрите на команду bash test

Вы можете использовать ее, вызвав команду:

 test -f "$1"

$1 - это первый аргумент, переданный скрипту, или вы можетеиспользуйте ярлык:

 [ -f "$1" ]

Пример сценария, чтобы проверить, существует ли файл:

 #!/bin/bash
 [ -f "$1" ] && echo "$1 exists" || echo "$1 does not exist"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...