Итак, у вас есть list файлов, который содержит:
this
that
the-other
и вы хотите создать для каждой строки в этом файле файл с именем, указанным в этой строке. Это довольно просто - если и только если каждая строка состоит только из одного слова:
cat list | xargs touch --
(-- говорит touch не пытаться анализировать что-либо после него в качестве аргумента; без него, если у вас есть имена файлов, такие как -this , ведущий - запутает прикосновение к мышлению 't', 'h', 'i' и 's' означают аргументы, а не части буквального имени файла, к которым нужно прикоснуться.)
Это простое дело, но это не то, что вы просили; если вы хотите, чтобы имя файла содержало некоторый текст, выходящий за рамки, указанные в строках list , все становится более сложным; xargs не может сделать такую интерполяцию. Вместо этого вам понадобится что-то вроде следующего (для этого требуется, чтобы ваша оболочка была bash , как это принято в большинстве систем):
for file in `cat list`; do touch -- $file-customtext; done
Помните, что это работает только в том случае, если каждая строка состоит только из одного слова. В этой команде $file заменяется именем файла, указанным в заданной строке list ; все вокруг воспринимается буквально, так что эта команда с list выше списком создаст следующие файлы:
this-customtext
that-customtext
the-other-customtext
Вы можете, конечно, заменить «-customtext» на что угодно, и у вас также может быть префикс и суффикс; если бы вместо этого do touch -- some-$file-text , например, это сработало бы так же, и в результате были бы файлы с именем some-this-text & c.
Теперь предположим, что содержимое list не так просто, в частности, что оно содержит пробелы, несловесные символы или другие вещи, которые оболочка не будет интерпретировать должным образом. Если вы спросите трех человек, что они порекомендуют в этом случае, вы, вероятно, получите пять ответов; Я хакер Perl, поэтому мой ответ - Perl. В частности, давайте предположим, что list содержит:
This is the first line
of three (three?) lines
in the list file.
Я бы сделал так:
cat list | perl -ne'chomp; system(qq|touch -- "custom $_ text"|)'
Который производит результирующие файлы:
custom This is the first line text
custom of three (three?) lines text
custom in the list file. text
Обычай текст в этом случае может быть все , что угодно, пробелы и все, до тех пор пока она не содержит ни " смутит touch , ни ' смутит perl в команде Perl $_ представляет содержимое данная строка из list , и пользовательский текст принадлежит либо до, либо после него, но в двойных кавычках. (Пользовательский текст вне двойных кавычек будет восприниматься на touch как отдельное имя файла, которое будет буквально создано, если в нем нет чего-то, что могло бы вызвать touch к ошибке.)