Чтение строк из текстового файла и создание текстового файла для каждого имени в каждой строке

Любопытный запрос, я думаю, вы бы более счастливы отключить рабочий стол, а затем использовать выпадающий терминал, такой как Guake.

Отключение рабочего стола

Предотвращение работы Nautilus с рабочим столом с помощью этого command:

gsettings set org.gnome.desktop.background show-desktop-icons false

Использование Guake [! ​​d4]

Вам может быть лучше использовать только выпадающий терминал, например Guake [! ​​d1]. Он активируется с помощью горячей клавиши, а затем прячется вместе с ней. Он очень настраиваемый, предлагая варианты трансперенсировки, параметры размера и цветовые варианты среди других.

Если вам не нравится Guake, есть еще много терминалов сбрасывания, но Guake - мой выбор.

Ссылка:

[d13 ] Как отключить nautilus от обработки рабочего стола?

1
задан 22 November 2015 в 22:41

3 ответа

В этом конкретном случае, когда у вас есть только одно слово в строке, вы также можете сделать:

xargs touch < file

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

xargs -I {} touch {} < file

Просто для удовольствия, вот пара других подходов (оба из которых могут обрабатывать произвольные имена файлов, включая строки с пробелами):

Perl
perl -ne '`touch "$_"`' file
Awk
awk '{printf "" > $0}' file 

Обратите внимание, что в Linux и подобных системах расширение является необязательным для подавляющего большинства файлов. Нет причин добавлять расширение .txt в текстовый файл. Вы свободны в этом, но это не имеет никакого значения. Итак, если вы хотите расширение в любом случае, используйте один из:

xargs -I {} touch {}.txt < file
perl -ne '`touch "$_.txt"`' file
awk '{printf "" > $0".txt"}' file 
18
ответ дан 23 May 2018 в 15:35

AWK также подходит для этой задачи:

testerdir:$ awk '{system("touch "$0)}' filelist

testerdir:$ ls
filelist  george  james  john  stewert

testerdir:$ awk '{system("touch "$0".txt")}' filelist                          

testerdir:$ ls
filelist  george.txt  james.txt  john.txt  stewert.txt
george    james       john       stewert

Другой способ, tee. Обратите внимание, что этот подход будет разорван, если строка содержит более одной строки в списке файлов.

testerdir:$ echo "" | tee $(cat filelist)


testerdir:$ ls
filelist  george  james  john  stewert

В качестве альтернативы, </dev/null tee $(cat filelist) также может быть выполнено, если вы хотите избежать трубопроводов

cp /dev/null (Поскольку я демонстрирую, что это работает с именами файлов, которые содержат пробелы):

testerdir:$ cat filelist | xargs -I {}  cp /dev/null  "{}"                     

testerdir:$ ls
filelist  FILE WITH SPACES  george  james  john  stewert

testerdir:$ ls FILE\ WITH\ SPACES                                              
FILE WITH SPACES
7
ответ дан 23 May 2018 в 15:35
  • 1
    @kos, если каждая строка в файле содержит ровно одну строку в строке, то она создает файл в строке. Это так же, как echo "" | tee file1 file2 file2. Но он сломается, если имена файлов содержат пробелы. – Sergiy Kolodyazhnyy 22 November 2015 в 21:38
Предположим, у меня есть текстовый файл ...

Скажем, у меня есть ответ;)

awk '{system("touch \""$0".txt\"")}' file

Водонепроницаемость также с пробелами и суффиксом ;)

7
ответ дан 23 May 2018 в 15:35

Другие вопросы по тегам:

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