8つのランダムな文字、数字、_、および-で構成される名前を持つかなり多くのファイルを含むディレクトリがあります。たとえば、次のようになります。
0dckGYH5.jpg
32Pz5-WQ.png
32_17pxH.png
Hsf4BQW9.jpg
xh-fa3Nu.gif
zYtBEaKA.png
...
これで作業は、各ファイルを繰り返し、ファイル名の最初の2文字という名前のディレクトリを作成し、ファイルをそのディレクトリに移動することです。
最終構造は次のようになります。
0d
└── 0dckGYH5.jpg
32
├── 32Pz5-WQ.png
└── 32_17pxH.png
Hs
└── Hsf4BQW9.jpg
xh
└── xh-fa3Nu.gif
zY
└── zYtBEaKA.png
システムには何もインストールする権限がありませんが、基本的なシェルコマンドのみを使用してこれを行うにはどうすればよいですか?
答え1
mkdir -p
との簡単な組み合わせでmv
十分です。
for f in *; do d="${f:0:2}"; mkdir -p "$d"; mv -t "$d" -- "$f"; done
展示する:
$ ls
0dckGYH5.jpg 32_17pxH.png 32Pz5-WQ.png Hsf4BQW9.jpg xh-fa3Nu.gif zYtBEaKA.png
$ for f in *; do d="${f:0:2}"; mkdir -p "$d"; mv -t "$d" -- "$f"; done
$ tree .
.
├── 0d
│ └── 0dckGYH5.jpg
├── 32
│ ├── 32_17pxH.png
│ └── 32Pz5-WQ.png
├── Hs
│ └── Hsf4BQW9.jpg
├── xh
│ └── xh-fa3Nu.gif
└── zY
└── zYtBEaKA.png
5 directories, 6 files
使用しているシステムのバージョンにmkdir
このオプションがない場合は、-p
ディレクトリが存在するかどうかを明示的にテストできます。
for f in *; do d="${f:0:2}"; [[ -d "$d" ]] || mkdir "$d"; mv -t "$d" -- "$f"; done