Простой bash-скрипт для чтения из одного файла с двойными кавычками в содержимом - PullRequest
0 голосов
/ 27 июня 2009

Ну, я действительно разозлился :( У меня есть файл с именем test.txt. и вот оно:

"/var/lib/backup.log"
"/var/lib/backup2.log"

двойные кавычки включены в файл, каждое в начале и в конце каталога, и я не могу их удалить.

Я пытаюсь написать скрипт для удаления файлов в test.txt. как это:

for del in `cat test.txt` ; do
rm -f $del
done

но это не работает, как ожидалось: (

выдает эту ошибку:

rm: cannot access "/var/lib/backup.log": No such file or directory
rm: cannot access "/var/lib/backup.log2": No such file or directory

Ответы [ 4 ]

3 голосов
/ 28 июня 2009

Это просто удалит символ кавычки из начала и конца прочитанной записи, что лучше, чем слепое удаление всех символов кавычки (поскольку они, конечно, могут появляться в именах файлов).

И, что касается вашего исходного кода, ПОЖАЛУЙСТА, ВСЕГДА ИСПОЛЬЗУЙТЕ ЦИТАТЫ, пока не узнаете, когда и когда нет.

while read -r; do
  fname=${REPLY#\"}
  fname=${fname%\"}
  echo rm -f "$fname"
done < myfiles.txt
2 голосов
/ 27 июня 2009

Следующая однострочная строка должна это сделать:

rm $(tr '\"' '\0' < test.txt)

Здесь tr переводит все " в ноль (\0), где вводом является файл с именем test.txt. Наконец, rm поставляется с результатами.

Для одной и той же строки может быть использован следующий Perl:

perl -nle 's{"}{}g;unlink' test.txt

Поиск и замена " в каждой строке, считанной с test.txt. Затем unlink удаляет файл.

Или,

sed 's! !\\ !g' < test.txt | sed 's/"//g' | xargs rm

Выход из пробелов, удаление " и удаление файла.

0 голосов
/ 18 февраля 2014

Думаю, eval команда сделает эту работу за вас:

for del in `cat test.txt` ; do
  eval rm -f $del
done
0 голосов
/ 27 июня 2009

Легко запутаться в быстром Perl-скрипте

#!/bin/perl

while (<STDIN>) {
   chomp;
   s/"//g;
   unlink $_;
}

и запустите его так:

./script.pl < test.txt

Несмотря на то, что вы указали bash в приведенном выше примере, я не уверен, если вы действительно хотите решение только для bash.

Обратите внимание, что это будет обрабатывать пробелы в именах файлов и т. Д.

...