我经常修饰文件,以便它们显示在文件管理器的顶部。
有没有办法触摸文件列表而不是单独触摸每个文件?
touch test1 test2
这不是我想要的。
管道...因此文件列表的输出将被发送到 touch 命令。
通过管道传输或以任何其他方式传输的文件文本列表 = 具有更新时间戳的文件。管道是一种重定向形式(将标准输出传输到其他目标),在 Linux 和其他类 Unix 操作系统中用于将一个命令/程序/进程的输出发送到另一个命令/程序/进程进行进一步处理。因此,文件列表的输出将发送到 touch 命令。
答案1
假设您的文件名在文本文件中列出,每行一个,没有前导或尾随空格(除非文件名本身以空格开头或结尾),并且没有文件名包含换行符(因为如果有的话,列表会不明确),这是 的一个很好的用例xargs
。
该xargs
命令从输入中读取单词并将它们作为参数传递给命令。默认情况下,它使用任意空格拆分单词。由于文件名包含空格很常见,因此这种默认行为可能不适合您,甚至可能最终对不在您的列表中的文件进行操作。但是,GNU xargs(xargs
在 Ubuntu 中提供)有一个-d
可用于指定任意分隔符的选项。从您的描述来看,您似乎已经有一个文件列表,每行一个。在这种情况下,您可以指定\n
为分隔符。
假设文件名列在名为的文件中files.txt
。然后您可以运行:
<files.txt xargs -d'\n' touch
<files.txt
重定向自files.txt
。xargs -d\'n' touch
从其输入中读取参数,在换行符处拆分,然后将它们传递给touch
。-d'\n'
导致 shell 将文字文本传递-d\n
给xargs
。它xargs
会对序列进行\n
特殊处理,知道您指的是换行符。
当然,您可以将重定向 放在<files.txt
命令中的任何位置(尽管大多数人会将其放在最开始或最结尾)。如果您有一个生成列表的命令而不是文件,则可以从该命令通过管道传输到xargs
。例如,如果您在当前目录中有一个名为 的脚本make-list
,则可以运行:
./make-list | xargs -d'\n' touch
xargs
在 Ubuntu 中也有一个-a
选项,如果你使用现有文件作为输入,并且由于某种原因你希望将文件名作为操作数传递给它而不是重定向到它:
xargs -a files.txt -d'\n' touch