在IF

2015-05-09 43 views
0

之後,Bash腳本沒有按文件類型排序我需要一些幫助,夥計們。我有一個bash代碼在IF

#!/bin/bash 
echo "Iveskite kataloga, kurio analize norite atlikti" 
read katalogas 
failai=$(find -x $katalogas) 
for failas in $failai 
do 
    if [[ -d "$failas" ]] 
    then 
    echo $failas " yra direktorija " 
    else 
    if [[ -x "$failas" ]] 
    then 
     echo $failas " yra vykdomasis failas " 
    else 
     if [[ -f "$failas" ]] 
     then 
     echo $failas " yra paprastasis failas " 
     fi 
    fi 
    fi 
done 

我要打,最終結果將根據文件類型進行排序。我這樣做:failai=$(find -x $katalogas)但它似乎不工作。

+0

你在哪個平臺上?我從來沒有見過'-x'標誌之前找到,所以我不知道它應該做什麼 –

+0

[不要迭代'find'的結果!](http://stackoverflow.com/q/21663090/418066)如果有名稱中有空格的文件,您認爲會發生什麼? – Biffen

+1

@Eric Renouf,從BSD的管理中發現「-x阻止** find **從降序進入具有與下降開始的文件不同的設備編號的目錄」。 – user3439894

回答

2

一個解決方案,這意味着你保持你的腳本大多是不變的:

#!/bin/bash 
echo "Iveskite kataloga, kurio analize norite atlikti" 
read katalogas 
failai=$(find -x $katalogas) 
typeD=fileslist1 
typeX=filelist2 
typeF=filelist3 
> $typeD 
> $typeX 
> $typeF 
for failas in $failai 
do 
    if [[ -d "$failas" ]] 
    then 
    echo $failas " yra direktorija " >> $typeD 
    else 
    if [[ -x "$failas" ]] 
    then 
     echo $failas " yra vykdomasis failas " >> $typeX 
    else 
     if [[ -f "$failas" ]] 
     then 
     echo $failas " yra paprastasis failas " >> $typeF 
     fi 
    fi 
    fi 
done 
cat $typeD $typeX $typeF 

或者,要避免寫文件,並使用「排序」,您將需要一個排序鍵相應添加到您的輸出,即改變 「d:」, 「X」 和 「F:」 固定順序的要求:

#!/bin/bash 
echo "Iveskite kataloga, kurio analize norite atlikti" 
read katalogas 
failai=$(find -x $katalogas) 

for failas in $failai 
do 
    if [[ -d "$failas" ]] 
    then 
    echo "A: $failas yra direktorija " 
    else 
    if [[ -x "$failas" ]] 
    then 
     echo "X: $failas yra vykdomasis failas " 
    else 
     if [[ -f "$failas" ]] 
     then 
     echo "F: $failas yra paprastasis failas " 
     fi 
    fi 
    fi 
done | sort 

您可以選擇添加一個 「|切-d ':' -f2-」 後「排序」刪除排序鍵。

1

這可能是最簡單的運行find三次。 (這也避免了在嘗試將所有找到的文件名存儲在單個列表中時可能出現的任何問題,例如使用包含空格的文件名。)除非katalogas包含文件,否則這不太可能是瓶頸爲您的腳本。

echo "Iveskite kataloga, kurio analize norite atlikti" 
read katalogas 
# First, get the directories 
find -x "$katalogas" -type d 
# Next, get anything with a permission bit set 
# Ignore directories you already found 
find -x "$katalogas" -not -type d -perm -111 
# Find any regular files not matched by the above 
find -x "$katalogas" -not -type d -not -perm -111 -type f 
+0

'發現:-perm:x:非法模式字符串' – semkius

+0

哦,我錯過了文檔的最後一行,表示符號模式可能不以短劃線開頭。試試'-perm -111'。 – chepner

+0

嗯。 '-perm'沒有按我期望的方式工作。我似乎收到很多沒有設置任何執行位的文件。 – chepner