我有一個需要排序的全部271,568個文件的集合,全部在同一目錄中。幸運的是,他們都方便地命名的基礎上,他們應該在哪個文件夾基於文件名排序271,568文件在Bash中
例如,文件的一小部分可能看起來像:
.
├── file.sort.shamwow
├── file.sort.shamwow.abc
├── file.sort.shamwow.example.alsoafile
├── file.sort.shamwow.example.file
├── foo.bar
├── foo.bar.a
├── foo.bar.b
├── foo.lel
├── foo.wow.a.50
└── foo.wow.b
當他們完成後進行排序,他們應該看看像:
.
├── file
│ └── sort
│ └── shamwow
│ ├── example
│ │ ├── file.sort.shamwow.example.alsoafile
│ │ └── file.sort.shamwow.example.file
│ ├── file.sort.shamwow
│ └── file.sort.shamwow.abc
└── foo
├── bar
│ ├── foo.bar
│ ├── foo.bar.a
│ └── foo.bar.b
├── foo.lel
└── wow
├── foo.wow.a.50
└── foo.wow.b
使文件foo.wow.a.50
將放在目錄wow
是目錄foo
的內內,等所有文件。
我想要的程序會根據點在目錄中的位置對文件進行排序。但是,如果該文件夾中只有一個文件(例如foo/wow/a.50
),則不會爲該文件創建新的文件夾。
現在,我的半功能腳本的樣子:
#!/bin/bash
#organization for gigantic folder
> foo.txt
for f in *; do
d=${f:3}
d=${d%%.*}
d=${d%%.*}
echo $d
if grep -Fxq "$d" foo.txt
then
mkdir -p $d
mv $f $d
else
echo $d >> foo.txt
fi
done
rm foo.txt
但它並沒有真正的工作都順利。
有人可以修復我的代碼,或使自己的排序這混亂?謝謝!
我建議服用'ls'參考出來的你的問題 - 它會讓你得到一堆到http://mywiki.wooledge.org/ParsingLs的鏈接,而你的問題實際上並不需要使用任何'ls'。 –
@CharlesDuffy感謝您的建議。我將它改爲「根據文件名對Bash中的271,568個文件進行排序」。 –
順便說一句,你不能有三個*文件*名爲'foo/bar','foo/bar/a'和'foo/bar/b',後兩者的目錄名將與文件名衝突前任的。 –