次のような名前のファイルを含む「モデル」フォルダーがあります。
a_EmployeeData
a_TableData
b_TestData
b_TestModel
基本的に、アンダースコアを削除して作成する必要があります。
aEmployeeData
aTableData
bTestData
bTestModel
Unixコマンドラインにそうする方法はありますか?
次のような名前のファイルを含む「モデル」フォルダーがあります。
a_EmployeeData
a_TableData
b_TestData
b_TestModel
基本的に、アンダースコアを削除して作成する必要があります。
aEmployeeData
aTableData
bTestData
bTestModel
Unixコマンドラインにそうする方法はありますか?
これは で簡単に実行できますbash
。
for file in /path/to/model/*; do
mv "$file" "${file/_/}"
done
rename
コマンドが利用可能な場合は、単に実行します
rename 's/_//' /path/to/model/*
for f in model/* ; do mv "$f" `echo "$f" | sed 's/_//g'` ; done
編集:他の人からの提案のおかげでいくつかの変更がありましたが、私のコードは奇妙なファイル名に対してまだ悪いのではないかと心配しています.
たぶんこれ:
find model -name "*_*" -type f -maxdepth 1 -print | sed -e 'p;s/_//g' | xargs -n2 echo mv
分解:
plain files
ディレクトリ内のすべてを検索し、サブディレクトリを検索しないmodel
sed
ファイル名の調整を行う -_
を何も置き換えないxargs
、ファイルの名前を変更するものに送りましたmv
上記は予行演習用です。満足したら、実際の名前変更のためにecho
前を削除します。mv
警告: ファイル名にスペースが含まれていると機能しません。あればGNU sed
できる
find . -name "*_*" -maxdepth 1 -print0 | sed -z 'p;s/_//g' | xargs -0 -n2 echo mv
スペースを含むファイル名でも動作します...
zsh で:
autoload zmv # in ~/.zshrc
cd model && zmv '(**/)(*)' '$1${2//_}'
marc@panic:~$ echo 'a_EmployeeData' | tr -d '_'
aEmployeeData