Как проверить, существует ли файл или нет, и создать / удалить, если он / не существует в оболочке - PullRequest
0 голосов
/ 05 августа 2020

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

ls | awk '\filename\' <if exist delete else create>

Мне нужен ls, поскольку в моей проблеме есть команда, которая выводит список строк, которые необходимо конвейерно передать на awk тогда возможно touch/mkdir.

Ответы [ 3 ]

0 голосов
/ 05 августа 2020

Использование oc projects и oc new-project вместо ls и touch, как указано в комментарии.

oc projects |
while read -r proj; do
    if [ -d "$proj" ]; then
        rm -rf "$proj"
    else
        oc new-project "$proj"
    fi
done

Я не думаю, что есть полезный способ записать это как один лайнер. Если хотите, вы можете заменить символы новой строки точкой с запятой, за исключением символов после then и else.

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

0 голосов
/ 05 августа 2020
rm yourfile 2>/dev/null || touch yourfile

Если файл существовал раньше, rm завершится успешно и сотрет файл, а touch не будет выполнен. После этого у вас не будет файла.

Если файл не существовал раньше, rm завершится ошибкой (но сообщение об ошибке не отображается, так как оно направлено в битовый пакет), и из-за отсутствия -Нулевой код выхода rm, будет выполнен touch. После этого вы получите пустой файл.

Предостережение: если файл существует, но у вас нет прав на его удаление, вы не заметите эту ошибку из-за перенаправление stderr. Следовательно, для отладки и более поздней диагностики может быть лучше вместо этого перенаправить stderr в какой-либо файл.

0 голосов
/ 05 августа 2020
#!/bin/bash

if [ -z "$1" ] || [ ! -f  "$1" ] # $1 is input filename and -f check if $1 is a regular file
then
    rm "$1" #delete the file
else
   touch "$1" #create the file
fi

сохранить файл как создатель файла. sh

изменить разрешение, чтобы разрешить выполнение с помощью sudo chmod a+rx

при запуске сценария используйте ./filecreator.sh yourfile.extension

Вы можете увидеть файл в своем каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...