間に挿入された複数のディレクトリの名前を変更します。

間に挿入された複数のディレクトリの名前を変更します。

次のように名前を変更する必要があるディレクトリが何百ものあります。

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

renameFedora、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]*

関連情報