在其他参数中使用通配符的值

时间:2015-07-23 13:53:06

标签: linux wildcard

对此有一个单行解决方案吗?

我在目录中有很多文件和子目录。 为简化起见,我只说

./dir1/file1
./dir2/file2
./file3

我想使用通配符(*)为每个文件运行一个命令,然后使用通配符的值生成格式为dir_file的文件ID,并将其作为命令的另一个参数

例如,

command -file * -id <something>

对于示例中的3个文件,应在扩展通配符后调用:

command -file ./dir1/file1 -id dir1_file1
command -file ./dir2/file2 -id dir2_file2
command -file file3 -id file3

1 个答案:

答案 0 :(得分:0)

至少在Bash中,这是不可能的,因为:

  

分词后,除非设置了-f选项,否则bash会扫描   每个单词的字符*,?和[。如果其中一个字符   出现,然后这个词被视为一个模式,并替换为   按字母顺序排序的匹配模式的文件名列表。

这意味着单个*将替换为与该模式匹配的所有文件的列表。自己尝试一下 - 在终端输入*后按MS- *(这意味着同时按住 Alt + Shift + * )和通配符将被扩展。

你可以使用find实现你想要的东西,然而它很快就会变得难以理解:

find . -type f -name "*"  -exec bash -c 'command -file {} -id (echo {} | sed -e 's,\.,dot,' | sed -e 's,/,_,g' )'  \;