次のディレクトリツリーがあります。
Comb
|
|--- 1.json2
|--- 1.cc.json2.ml
|--- 102.cc.json2.pre2.ml
|--- 1.json2.pre1
|--- 102.json2.pre1
この結果を得るにはcreateとbashが必要です。
Comb
|--|
|-1
| |--- 1.json2
| |--- 1.cc.json2.ml
| |--- 1.json2.pre1
|- 102
|--- 102.cc.json2.pre2.ml
|--- 102.json2.pre1
同様のことを試しましたが、ある時点でファイルが壊れたり失われたりしました。
for file in *.cc.json2.pre2.ml; do mkdir -- "${file%.cc.json2.pre2.ml}"; mv -- "$file" "${file%.cc.json2.pre2.ml}"; done
for file in *.cc.json2.pre1.ml; do mkdir -- "${file%.cc.json2.pre1.ml}"; mv -- "$file" "${file%.cc.json2.pre1.ml}"; done
ベストアンサー1
次のシェルスクリプトは、あなたの質問に示されているディレクトリツリーに対して機能するはずです。
#!/bin/bash
for i in *.*
do
if test -e "$i"
then
tmp="${i%%.*}"
mkdir -p "$tmp"
mv -i "$i" "$tmp"
else
echo "No file or directory matching '$i'"
fi
done
cd
ディレクトリを入力するには、「ディレクトリの変更」を選択します。シェルスクリプトを作成します。
名前をつけてポイントがない、例えば
shellscript
(自分で動かしたくないので)シェルスクリプトの実行
bash shellscript
ディレクトリツリーの上部に新しいファイルを作成してシェルスクリプトを再実行したい場合は、「実行可能にする」をお勧めします。
chmod +x shellscript
その後、「直接」実行できます。
./shellscript