readlink -f работает не так, как ожидалось

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

-121--205123-

Если вы не хотите изменять средство запуска, вы можете проверить в начале сценария, выполняется ли оно в терминале. Если это не так, откройте терминал и перезапустите сценарий. В верхней части сценария:

if [ ! -t 1 ]; then
    args=''
    for arg in "$@"; do
        args="$args \"${arg//\"/\\\"}\""
    done
    xfce4-terminal -e "$0 $args"
    exit 0
fi

Если имеется вывод на терминал для отображения пользователю, добавьте его в нижнюю часть:

read -n1 -u1 -rp 'Press any key to close this window.'
-121--174328-

Xorg.0.log является текущим (последним) журналом. Xorg.1.log - следующий последний журнал.

0
07.04.2018, 23:22
3 ответа

Во-первых, команда ls -lR | egrep '^-' | rev | cut -d" " -f1 | revпросто показывает имена файлов без путей. Если вам нужно получить все файлы с путями, вы можете использовать find./ -type fи проанализировать этот вывод. Поэтому команда readlink -f $iне нужна.

Во-вторых, если вам нужно более эффективное решение, вам нужна только команда findс параметром exec:

find. -type f -exec touch -d "$YESTERDAY" {} +

-type f       find regular files
2
28.01.2020, 02:18

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

find. -type f -exec touch {} -d "$(date -d yesterday)" \;
  • find.:поиск в текущем каталоге .и во всем, что находится под ним
  • -type f:искать только обычные файлы
  • -exec:указать find запускать следующую команду для каждого найденного объекта
  • touch {} -d "$(date -d yesterday)" \;:команду, которую вы хотите выполнить для каждого файла. «{}» — это заполнитель для вывода findи \; обозначает конец оператора -exec
2
28.01.2020, 02:18

Ваши RFILES — это просто имена файлов без путей. readlinkне является find, он использует имена, которые вы ему даете, и без пути в них предполагается, что они находятся в текущем каталоге.

С современным башом:

shopt -s globstar
RFILES=( ** )

Но вам не нужно readlink, вы можете использовать вывод lsнапрямую. С globstarэто так же просто, как:

touch -d "$YESTERDAY" $(ls -d **)

а на практике даже не нужноls:

touch -d "$YESTERDAY" **

В противном случае сfind:

find. -type f -exec touch -d "$YESTERDAY" {} +

Наконец, спецификация даты для touchболее гибкая, чем вы думаете:

touch -d yesterday **

будет работать...

0
28.01.2020, 02:18

Теги

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