2017-06-19 51 views
0

解決的目錄和文件,我有一個包含6目錄的目錄:如何通過他們的排名

動物

cat 
    cow 
    dog 
     a 
     b 
    donkey 
    monkey 
    zebra 

我希望通過自己的排名(以解決他們在bash文件時的目錄進行排序每個人都有一個等級)

因此,例如,我想複製第三個目錄是狗。 我不想提及名字狗,我想把它稱爲動物文件夾中的第三個目錄。 所以例如cp -r home/animal /「第三目錄」..

任何想法?

回答

2

您可以使用GNU查找和排序GNU創建數組。

在bash 4.4之前使用,而讀循環

while IFS= read -d '' file; do 
    Animal+=("$file") 
done < <(find . -type d -print0 | LC_ALL=C sort -z) 

cp -r "/home/animal/${Animal[3]}" "target" 

,或者如果你有bash的4.4,你可以跳過循環和readarray使用

IFS= readarray -d '' Animal < <(find . -type d -print0 | LC_ALL=C sort -z) 

cp -r "/home/animal/${Animal[3]}" "target" 
+0

但是,目前還不清楚操作系統是否期望按字節順序排序。爲什麼不'LC_ALL = en_US'例如。 – sjsam

+1

@sjsam沒有指定它應該如何排序,所以只需選擇'C',因爲它是最簡單,最安全的語言環境。 OP可以根據他們希望如何分類來輕鬆改變。 – 123

+0

它的工作原理,謝謝! 爲我的項目我需要打開一個目錄(例如a/b /)使用此方法,然後在該目錄(b)中,使用此方法打開另一個目錄(a/b/c /),但是當我重複這個腳本,它錯過了行爲,任何想法? while IFS = read -d''file;執行 然後IFS = read - 執行 cd = pwd'/$ {a [2]} 完成<(查找。 d'檔案;做 b + =(「$ file」) done <(find。-type d -print0 | LC_ALL = C sort -z) cd'pwd'/$ {b [1]} –

2

我建議填充數組與目錄名稱:

cd /home/animal 
animal=(foobar *) 
cd - 
cp -r "/home/animal/${animal[3]}" "target" 
+1

可能是值得一提的'foobar'作爲反正從一個開始實際計數:)不錯的一個反正。 – sjsam

相關問題