Sek*_*mty 8 linux file-management command-line
我有一个文本文件,其中包含一个项目列表(每行一个),我需要在给定目录中为所述列表中的每个条目创建一个文件;这些文件中的每一个都应在所述列表中以字符串命名。此外,如果可能,在文本文件中包含的字符串之后,应将自定义文本附加到文件名。
我应该使用哪些命令从命令行执行此操作?我想cat
,grep
和touch
(也许xargs
?)应该参与到这个过程中,但经过几次试验后,我仍然找不到正确的语法。
有人可以启发我吗?
cYr*_*rus 11
说你有list.txt
这样的:
file 1
file 2
file 3
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式实现您想要的:
while read FILE; do touch "${FILE} some string"; done < list.txt
Run Code Online (Sandbox Code Playgroud)
所以你有一个list
包含以下内容的文件:
this
that
the-other
Run Code Online (Sandbox Code Playgroud)
并且您想为该文件中的每一行创建一个具有该行指定名称的文件。这很简单——当且仅当每行只包含一个单词:
cat list | xargs touch --
Run Code Online (Sandbox Code Playgroud)
(--
告诉touch
不要尝试将其后的任何内容解析为参数;没有它,如果您有像 那样-this
的文件名,则前导-
会将触摸混淆为认为 't'、'h'、'i' 和 's' 的意思是参数,而不是要触摸的文字文件名的一部分。)
这是处理的简单案例,但这不是您要问的;如果您希望文件名包含一些超出 中行指定内容的文本list
,事情会变得更加复杂;xargs 不能做那种插值。相反,您需要类似以下内容(这要求您的 shell 是bash
,这是大多数系统上的标准):
for file in `cat list`; do touch -- $file-customtext; done
Run Code Online (Sandbox Code Playgroud)
请注意,这仅在每行仅包含一个单词时才有效。在此命令中,$file
被替换为在给定行中指定的文件名list
;它周围的一切都是字面意思,因此带有上述list
内容的命令将创建以下文件:
this-customtext
that-customtext
the-other-customtext
Run Code Online (Sandbox Code Playgroud)
当然,你可以用你喜欢的任何东西替换“-customtext”,你也可以有前缀和后缀;do touch -- some-$file-text
例如,如果您改为使用,它也能正常工作,并生成名为some-this-text
&c 的文件。
现在,假设 的内容list
不是那么简单 —— 具体来说,它们包含空格、非单词字符或 shell 无法正确解释的其他内容。如果你问三个人在这种情况下他们会推荐什么,你可能会得到五个答案;我是一名 Perl 黑客,所以我的回答是 Perl。具体来说,让我们假设 alist
包含:
This is the first line
of three (three?) lines
in the list file.
Run Code Online (Sandbox Code Playgroud)
我这样做的方式是:
cat list | perl -ne'chomp; system(qq|touch -- "custom $_ text"|)'
Run Code Online (Sandbox Code Playgroud)
产生结果文件:
custom This is the first line text
custom of three (three?) lines text
custom in the list file. text
Run Code Online (Sandbox Code Playgroud)
在这种情况下,自定义文本可以是您喜欢的任何内容,空格和所有内容,只要它既不包含"
(会混淆touch
)也不包含'
(会混淆perl
);在 Perl 命令中,$_
表示来自 的给定行的内容list
,自定义文本属于它之前或之后,但在双引号内。(双引号外的自定义文本将被视为touch
单独的文件名,除非它包含会导致touch
错误的内容,否则将按字面意思创建。)
归档时间: |
|
查看次数: |
6182 次 |
最近记录: |