次のように名前を変更する必要があるディレクトリが何百ものあります。
from 15_öblös to 15_adj_öblös
from 14_kies to 14_adj_kies
and so on...
したがって、数字と単語の間に「adj」を挿入する必要があります。
やったことは良くなかった
for dic in [0-9]*
do
m=`echo "$dic" | cut -d"_" -f1`
l=`echo "$dic" | cut -d"_" -f2`
mv "$dic" "${m}_adj_${l}"
done
答え1
rename
Fedora、Debian、およびその派生製品(Ubuntu、Mintなど)には、デフォルトでこれを実行するPerlバージョンのコマンドがインストールされており、次のように動作しprename
ます。
prename 's/_/_adj_/' *
# OR
rename 's/_/_adj_/' *
次のように、より複雑な操作を実行してより細かく制御し、ファイルを見つけて名前を変更できます。
prename 's/(\d+)_/$1_adj_/' *
# OR
rename 's/(\d+)_/$1_adj_/' *
注:の場合、prename
最初のパラメータはPerlコードです。
答え2
私はあなたのスクリプトで問題を見ることはできませんが、あなたが持っているすべてのディレクトリを知らないので、あなたが直面している問題は何であるかわかりません。しかし、次のようなものが役に立ちます。
find ./ -maxdepth 1 -type d | while read dirname
do
newdirname=$(echo ${dirname} | sed -e "1,1s/_/_adj_/")
mv ${dirname} ${newdirname}
done
答え3
非組み込みLinuxシステムでは、このrename
コマンドを使用できます。このコマンドは非常に簡単ですが、この場合は十分です。名前が数字で始まる現在のディレクトリ内のすべてのファイルのうち、最初のファイルを次の_
ように変更するには:_adj
rename _ _adj_ [0-9]*
Debian およびその派生製品 (Ubuntu、Mint など) では、このコマンドを指しますrename.ul
。これらのディストリビューションのコマンドは、最初の引数rename
とも呼ばれるより強力な別のコマンドです。prename
真珠パスワード。_
次に置き換える_adj_
:
prename 's/_/_adj_/' [0-9]*