创建以一系列文件作为输入执行命令,逗号分隔
create executing a command with a sequence of files as the input, comma separated
请原谅,这可能是一个简单的操作,但我来自面向对象的编程语言,这在 unix/bash/terminal 中不是很直观。
假设我想执行文件列表的命令,file1,file2,file3
所以命令会读取
cmd -i file1,file2,file3
现在,假设我有 1000 个这样的文件。我只想 运行 它遍历所有文件。然而。如果我只输入
cmd -i file{1..1000}
我收到一条错误消息。这是因为 file{1..1000}
return 的列表看起来像
file1 file2 file3 file4....
我需要它 return
文件 1、文件 2、文件 3、文件 4、....
你可以在这里使用 printf
:
cmd -i $(printf "%s," file{1..999})file1000
使用 bash 内置函数:
printf -v string "file%s," {1..1000}
cmd -i ${string%,*}
如果您真的必须这样做(请参阅我的评论:您应该重写代码以使您的生活更轻松),那么:
cmd -i $(echo file{1..1000} | tr ' ' ',')
echo
生成的文件名用空格分隔; tr
命令将嵌入的空格映射为逗号。
但您确实需要重写您的命令,以便它希望每个文件名作为一个单独的参数。
请原谅,这可能是一个简单的操作,但我来自面向对象的编程语言,这在 unix/bash/terminal 中不是很直观。
假设我想执行文件列表的命令,file1,file2,file3
所以命令会读取
cmd -i file1,file2,file3
现在,假设我有 1000 个这样的文件。我只想 运行 它遍历所有文件。然而。如果我只输入
cmd -i file{1..1000}
我收到一条错误消息。这是因为 file{1..1000}
return 的列表看起来像
file1 file2 file3 file4....
我需要它 return 文件 1、文件 2、文件 3、文件 4、....
你可以在这里使用 printf
:
cmd -i $(printf "%s," file{1..999})file1000
使用 bash 内置函数:
printf -v string "file%s," {1..1000}
cmd -i ${string%,*}
如果您真的必须这样做(请参阅我的评论:您应该重写代码以使您的生活更轻松),那么:
cmd -i $(echo file{1..1000} | tr ' ' ',')
echo
生成的文件名用空格分隔; tr
命令将嵌入的空格映射为逗号。
但您确实需要重写您的命令,以便它希望每个文件名作为一个单独的参数。