命令'find'找到的排序文件

时间:2013-05-31 13:06:01

标签: linux bash shell find

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

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

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

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

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

有可能吗?

1 个答案:

答案 0 :(得分: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