2013-05-31 65 views
1

我的程序會根據文件的排列順序獲取文件列表並對其進行處理。例如:現在通過命令'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 * _」,其中後再次星星站在佛像上r是數值。

可能嗎?

+2

'find -whatever -print0 |排序-z -whatever | xargs -0。/ myScript.py' – tripleee

回答

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 
+0

好吧,我確定parameterOne和ParameterTwo是在下劃線之間,並且只是侷限於它們所在的下劃線分隔的字段。謝謝! –