3

次のような名前のファイルを含む「モデル」フォルダーがあります。

a_EmployeeData
a_TableData
b_TestData
b_TestModel

基本的に、アンダースコアを削除して作成する必要があります。

aEmployeeData
aTableData
bTestData
bTestModel

Unixコマンドラインにそうする方法はありますか?

4

7 に答える 7

5

これは で簡単に実行できますbash

for file in /path/to/model/*; do
mv "$file" "${file/_/}"
done

renameコマンドが利用可能な場合は、単に実行します

rename 's/_//' /path/to/model/*
于 2013-06-24T21:54:25.770 に答える
2
for f in model/* ; do mv "$f" `echo "$f" | sed 's/_//g'` ; done

編集:他の人からの提案のおかげでいくつかの変更がありましたが、私のコードは奇妙なファイル名に対してまだ悪いのではないかと心配しています.

于 2013-06-24T21:38:52.797 に答える
1

たぶんこれ:

find model -name "*_*" -type f -maxdepth 1 -print |  sed -e 'p;s/_//g' | xargs -n2 echo mv

分解:

  • 少なくとも 1 つのアンダースコアを含むplain filesディレクトリ内のすべてを検索し、サブディレクトリを検索しないmodel
  • sedファイル名の調整を行う -_を何も置き換えない
  • 旧姓も印刷
  • 2つのファイル名をxargs、ファイルの名前を変更するものに送りましたmv

上記は予行演習用です。満足したら、実際の名前変更のためにecho前を削除します。mv

警告: ファイル名にスペースが含まれていると機能しません。あればGNU sedできる

find . -name "*_*" -maxdepth 1 -print0 |  sed -z 'p;s/_//g' | xargs -0 -n2 echo mv

スペースを含むファイル名でも動作します...

于 2013-06-24T22:13:39.460 に答える
1

zsh で:

autoload zmv # in ~/.zshrc
cd model && zmv '(**/)(*)' '$1${2//_}'
于 2013-06-25T06:58:44.137 に答える
0
marc@panic:~$ echo 'a_EmployeeData' | tr -d '_'
aEmployeeData
于 2013-06-24T21:38:57.550 に答える