ディレクトリには、次のファイルとそれ以上のファイルがあります。
- ファイル1.txt
- ファイル1.html
- ファイル1.pdf
- ...
すべてファイル1と交換する必要があります新しいファイル:
- 新しいファイル.txt
- newfile.html
- 新しいファイル.pdf
- ...
私は試した:
for f in $(ls file1*); do mv $f newfile*; done
これは置き換えますみんなファイルとファイル1ファイルとして新しいファイル*。
for f in $(ls file1*); do mv $f ${f/$f/"newfile"}; done
これはまた置き換えますみんなファイルとファイル1ファイルとして新しいファイル。または
find . -name "file1.*" -exec sh -c 'mv I DONT KNOW' _ {} \;
ファイル名の一部を変数に設定して変更する方法がわかりません。
mvを使ってこれを行う最も簡単な方法は何ですか?
答え1
Linuxで実行している場合、これを実装する最も簡単な方法は次のものを使用することですrename
(パッケージの一部です)util-linux
。
rename 'file1' 'newfile' file1*
これはあなたが説明することを行います。 3つのパラメータが必要ですrename
。
- ファイル名で探すべきこと
- 代わりに何を使うべきですか?
- 処理するファイルマスク
クイック検索をしましたが、rename
これが最初のヒットケースでした。http://linux.icydog.net/rename.php
修正するシステムに存在しないがrename
存在する場合は、bash
次のようにバッチの名前変更を実行できます。これはrename
上記のものと同じです。
for f in file1*; do mv -v "$f" "${f/file1/newfile}"; done
答え2
努力する:
for f in ./file1.*; do
echo mv "$f" "newfile.${f##*.}"
done
このコードはmvコマンドの内容のみを表示します。これが必要な場合は、echo
前のmvコマンドを削除してください。
答え3
Debianベースのシステムでは、rename
ユーティリティはPerl renameであり、構文は少し異なります。
rename 's/file1/newfile/' file1*
最初のパラメーターは、見つかった各ファイル名に適用されるPerl式です。
答え4
GNUを使って次を見つけてください。
find . -maxdepth 1 -name "file1*" -printf "%f\0" | xargs -0 -I {} echo mv -v {} new{}
問題がなければ削除してくださいecho
。