对此有一个单行解决方案吗?
我在目录中有很多文件和子目录。 为简化起见,我只说
./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
答案 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' )' \;