my-project
次のファイルツリーに名前が付けられたプロジェクトがあります。
.
├── src
│ ├── index.html
│ ├── main.js
│ ├── normalize.js
│ ├── routes
│ │ ├── index.js
│ │ └── Home
│ │ ├── index.js
│ │ └── assets
│ ├── static
│ ├── store
│ │ ├── createStore.js
│ │ └── reducers.js
│ └── styles
└── project.config.js
今私は欲しい次のファイルの名前を変更します。-orig
ファイルタイプ拡張子の前に文字列を追加します。
src/main.js
src/routes/index.js
src/store/reducers.js
project.config.js
(ファイルの内容をまったく変更したくありません。)
最終ファイルツリーは次のとおりです。
私のプロジェクト/(以降).
├── src
│ ├── index.html
│ ├── main-orig.js
│ ├── normalize.js
│ ├── routes
│ │ ├── index-orig.js
│ │ └── Home
│ │ ├── index.js
│ │ └── assets
│ ├── static
│ ├── store
│ │ ├── createStore.js
│ │ └── reducers-orig.js
│ └── styles
└── project.config-orig.js
1行またはコマンドでこれを行う方法はありますか?
答え1
存在するbash
:
while read ; do mv "$REPLY" "${REPLY%.js}-orig.js" ; done < files-to-rename.txt
答え2
1つのアプローチは、シェルにファイルの各行を読み取るように要求し、シェルパラメータ拡張を使用してデフォルトのファイル名と拡張子を抽出することです。
while IFS= read -r filename
do
base=${filename%.*}
extension=${filename##*.}
echo mv -- "my-project/$filename" "my-project/${base}-orig.${extension}"
done < files-to-rename.txt
echo
出力が正しいと思われる場合は削除してください。
答え3
for i in `cat files-to-rename.txt`; do postfix=${i/#*\./}; mv $i ${i/%.$postfix/-orig.$postfix}; done;
これはjsだけでなく、すべてのサフィックスで機能します。しかし、自分の利益のためにgitまたはsvnを試してみてください。 tarコマンドでさえ、これよりも優れています。
答え4
rename
コマンドを使用してください。まず、何も変更しない詳細なテスト実行を実行します。
rename -n -v 's/.js$/-orig.js/' $(find my-project/)
これが正しいと思われる場合は、削除して-n
実際にファイル名を変更してください。
rename -v 's/.js$/-orig.js/' $(find my-project/)
rename
注:次の場所に設置する予定ダーバンまたはUbuntuボックスで次を実行します。
apt install rename