1

我的程序获取文件列表并根据文件的顺序处理它们。例如:

$ ./myScript.sh --takeFiles a b c d e f g

现在,由于我必须传递大量文件,我使用find命令并指定如何找到我想要的确切文件:

sudo find . -path "./aFolder/*_parameterOne_*_*/*_parameterTwo_*_*/*_someCommonString_*" ! -name "*_aStringToExclude*" -exec ./myScript.py --takeFiles {} +

它就像一个魅力,除了我将我的文件首先按“parameterTwo_* ”(在星号中我有一个整数)排序​​然后再按“parameterTwo *_”排序后传递给 myScript.sh 星号代表一个数值。

可能吗?

4

1 回答 1

1

前面的部分parameterOneparameterTwo包含字符_,你可以简单地使用sort

find ... -print0 |
sort -z -t_ -k6n -k3n |
xargs -r0 ./myScript.py --takeFiles

更新:更复杂的解决方案可能如下所示。但是,我认为在 Python 脚本中对路径名进行排序会更容易。

#! /bin/bash
find ... -print0 |
while IFS= read -r -d '' pathname; do
    [[ "$pathname" =~ "_parameterOne_"([0-9]+).*"_parameterTwo_"([0-9]+) ]] &&
    printf '%05d%05d %s\0' "${BASH_REMATCH[2]}" "${BASH_REMATCH[1]}" "$pathname"
done |
sort -z |
while IFS= read -r -d '' pathname; do
    printf '%s\0' "${pathname#* }"
done |
xargs -r0 ./myScript.py --takeFiles
于 2013-05-31T13:58:13.273 回答