我有一个小的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

10-04 16:14