sha*_*ant 2 command-line ls pipe xargs echo
当我做ls输出时,输出是在列中,但是我需要输出只在一列中,一行一行,每行一个条目。
所以我能想出的唯一方法是:
echo * | xargs -n1 echo
Run Code Online (Sandbox Code Playgroud)
这是实现它的标准方法还是这种糟糕的风格?
关于 xargs 的一般建议是,不要使用xargs. 任何常用工具都不支持其输入格式。
xargs 使用的下一个级别是 use xargs -0,输入以空值分隔。但在你的情况下, xargs 无论如何都是毫无意义的。
如果要列出目录中的文件,可以使用ls. 为确保每行只有一个文件,请使用ls -1. ls当输出到管道或文件时,该命令总是每行放置一个文件。当输出是终端时,plain 会ls在列中对齐文件名,但ls -1不会。
如果您有一个单词列表,并且希望每行打印一个单词,则可以使用printf '%s\n'. 这与 类似echo,不同之处在于它在每个元素后打印换行符而不是空格,并且没有反斜杠或初始破折号处理的危险。
printf '%s\n' * # prints the names of the files in the current directory
printf '%s\n' "$@" # prints the positional arguments
printf '%s\n' "${a[@]}" # prints the element of the array `a`
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为所有原因 plainxargs都不好,即它会破坏包含空格或反斜杠的文件名:
$\xc2\xa0touch "foo bar"\n$ echo * | xargs -n1 echo\nfoo\nbar\nRun Code Online (Sandbox Code Playgroud)\n\n此外,它为每个文件运行(外部)命令的副本echo。
在大多数 shell 中,您可以使用它printf "%s\\n" *来获取列表。或者ls -1。
但是,问题是,您想对文件列表做什么?只是查看它们还是在脚本中使用它们?对于后者,您可能最好使用
\n\nfor f in * ; do something with "$f" ; done\nRun Code Online (Sandbox Code Playgroud)\n\n或某些变体find ... -exec somecmd {} +
| 归档时间: |
|
| 查看次数: |
11466 次 |
| 最近记录: |