Я хочу добавить имя файла, удаленное из rm -rf *.log
, в другой файл, скажем xyz.abc
. Есть ли способ сделать это?добавить вывод rm -rf в файл
Он должен добавить все файлы .log
в xyz.abc
. Пробовал, но не смог, поэтому прошу здесь.
Я хочу добавить имя файла, удаленное из rm -rf *.log
, в другой файл, скажем xyz.abc
. Есть ли способ сделать это?добавить вывод rm -rf в файл
Он должен добавить все файлы .log
в xyz.abc
. Пробовал, но не смог, поэтому прошу здесь.
Команда rm -rf *.log
не печатает никаких выходных данных; он молча удаляет указанные файлы.
Опция -r
, вероятно, не имеет особого смысла в этом случае и потенциально может быть опасным. Если вы пытаетесь удалить все *.log
файлы в текущем каталоге, все, что вам нужно, это
rm -f *.log
В -r
значение только если у вас есть один или несколько каталогов, чьи имена заканчиваются на .log
; он затем рекурсивно удалит эти каталоги и все их содержимое.
Предполагая, что вы просто хотите, чтобы удалить все *.log
файлов в текущем каталоге и добавить их имена xyz.abc
, вот как я бы это сделать:
for file in *.log ; do
echo "$file" >> xyz.abc
rm -f "$file"
done
Спасибо, это работает. – mbBlogging
Самый простой способ - написать небольшой скрипт, который сделает это за вас, и использовать его вместо реальной программы rm
. Таким образом, вы могли бы написать что-то вроде этого и сохранить его, как, скажем, $HOME/RemoveLogs
#!/bin/bash
find . -maxdepth 1 -name \*.log -print -exec rm {} +; >> xyz.abc
Затем в терминале, введите следующую команду только один раз, чтобы сделать скрипт исполняемым
chmod +x $HOME/RemoveLogs
, а затем, когда вы чтобы удалить журналы, просто запустите
$HOME/RemoveLogs
в качестве альтернативы, вы можете просто ввести команду find
выше непосредственно в терминале, если у вас есть AG ООД память и как вводить :-)
Ответ обновлен, пожалуйста, взгляните еще раз. –
Зачем запускать 'find', затем' rm'? Вы дважды попадаете в файловую систему (предоставлено, кэш-память direntry обычно содержит содержимое между ними), а не только один раз хранит результаты glob и дважды используется для записи в файл, один раз для создания списка аргументов для 'rm '. –
(Кроме того, поскольку вы не останавливаете 'find' от рекурсии,' find' может отображать больше файлов в этом прецеденте, чем 'rm', а затем удаляет). –
Учитывая случай использования разъяснен в комментарии - что вы не пытаетесь войти все использования в rm
, но конкретный экземпляр, как вызывается из процесса сборки (или хрон работа уборка после указанного процесса сборки):
printf '%s\n' *.log >>deletedFiles
rm -f -- *.log
Обратите внимание, что это не будет различать файл с именем bar$'\n'foo
и двух файлов с именем bar
и foo
; оба будут регистрироваться с двумя последовательными линиями. Для этого вам нужно использовать либо '%q\n'
(если ваша оболочка bash
) или %s\0
для вашей строки формата; первый будет генерировать ваш журнал в безопасной форме (довольно легко для людей, чтобы читать, трудно разобрать безопасно из оболочки); последний будет производить его в форме, ограниченной NUL (трудно для людей читать, легко анализировать машиной на любом языке); либо является однозначным во всех возможных именах файлов.
У меня будет попытка и будет обновляться, если это работает. :) Спасибо. – mbBlogging
Если 'ет -rf' не выделяет этот список файлов в качестве вывода, тогда вы запрашиваете что-то другое, чем «добавление вывода rm -rf». Не могли бы вы понять, как выглядят результаты? Является ли намерение чем-то понятным для человека?Недвусмысленно машинный синтаксический анализ (в этом случае список имен файлов должен быть NUL-ограниченным или с оболочкой)? Что-то другое? –
Вот как мой вывод должен выглядеть. У меня есть 3 файлов журнала, 1.log 2.log 3.log Я подаю гт -rf * .log И я хочу файл NAMD xyz.abc, который будет создан, который хранит 1.log 2.log – mbBlogging
Всякий раз, когда файлы удаляются с помощью 'rm' из этого экземпляра/скрипта в консоли? Всякий раз, когда файлы удаляются любым способом любым процессом в системе? Вам нужен «xyz.abc» для каждого каталога (поскольку вы показываете имена файлов без имен каталогов в вашем примере)? Один глобально с полными путями? –