我有一个小的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 ...我可以从命令行处理它,还是需要在代码中处理它?
最佳答案
如果文件名的格式确实是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