我有一个小的C ++程序,它从bash中读取参数。 假设我有一个包含两个不同扩展名的文件的文件夹。 示例:file1.ext1 file1.ext2 file2.ext1 file2.ext2 ...
如果我使用此命令执行程序:./readargs *.ext1
它将使用ext1读取所有文件。
如果我执行./readargs *.ext1 *.ext2
,它将读取所有.ext1文件,然后读取所有.ext2文件。
我的问题是如何以这种顺序读取的方式执行程序:file1.ext1 file1.ext2 file2.ext1 file2.ext2 ...我可以从命令行处理它还是我需要处理它在代码中?
答案 0 :(得分:1)
如果您的文件名称的格式为file1.ext1 file1.ext2 file2.ext1 file2.ext2
,则可以使用
echo *.{ext1,ext2}|sort -u
以上给出了输出:
$ ll | grep ext
23880775 0 -rw-r--r-- 1 user users 0 Apr 29 13:28 file1.ext1
23880789 0 -rw-r--r-- 1 user users 0 Apr 29 13:28 file1.ext2
23880787 0 -rw-r--r-- 1 user users 0 Apr 29 13:28 file2.ext1
23880784 0 -rw-r--r-- 1 user users 0 Apr 29 13:28 file2.ext2
$ echo *.{ext1,ext2} | sort -u
file1.ext1 file2.ext1 file1.ext2 file2.ext2
然后复制输出并调用程序。但是,如果您确实需要在.ext1
的文件之前使用.ext2
的文件,那么您必须确保.ext1
在字母上低于.ext2
或使用另一种排序标准。
除此之外,您还可以调整可执行文件以正确的顺序处理命令行参数,但如果您已经有可执行文件,我建议您使用第一个解决方案作为解决方法。
编辑:此命令也可以词法排序:
$echo *.ext[1,2]
$file1.ext1 file1.ext2 file2.ext1 file2.ext2