GNU/Linux >> Linux の 問題 >  >> Linux

検索を使用して複数のファイルの名前を変更するにはどうすればよいですか?

findを使用して、複数のファイルの名前を変更したい(file1…fileNからfile1_renamed…fileN_renamed) コマンド:

find . -type f -name 'file*' -exec mv filename='{}' $(basename $filename)_renamed ';'

しかし、このエラーが発生します:

mv: cannot stat ‘filename=./file1’: No such file or directory

ファイル名がシェル変数として解釈されないため、これは機能しません。

承認された回答:

以下は、アプローチの直接的な修正です。

find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}_renamed"' \;

ただし、一致するファイルがたくさんある場合、これは非常にコストがかかります。これは、新しいシェル(mvを実行する)を開始するためです。 )各試合について。また、ファイル名に面白い文字が含まれていると、これが爆発します。より効率的で安全なアプローチは次のとおりです。

find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}_renamed

また、奇妙な名前のファイルを操作できるという利点もあります。 findの場合 それをサポートします、これは

に減らすことができます
find . -type f -name 'file*' -exec mv {} {}_renamed \;

xargs versionは、{}を使用しない場合に役立ちます 、

のように
find .... -print0 | xargs --null rm

ここでrm 一度(または多数のファイルで数回)呼び出されますが、すべてのファイルに対して呼び出されるわけではありません。

basenameを削除しました あなたの質問では、おそらく間違っているので、foo/bar/file8を移動します file8_renamedへ 、foo/bar/file8_renamedではありません 。

編集 (コメントで示唆されているように):

  • 短縮されたfindを追加しました xargsなし
  • セキュリティステッカーを追加

Linux
  1. Linuxで複数のファイルを圧縮する方法

  2. Unixの単一のコマンドまたはスクリプトで複数のファイルの名前を変更する方法は??

  3. Linux:複数のファイルのファイル拡張子を削除する

  1. scp を使用して複数のファイルを同時にコピーする方法

  2. ls を使用して空でないファイルのみを一覧表示するにはどうすればよいですか?

  3. Unixで単一のコマンドまたはスクリプトで複数のファイルの名前を変更する方法は?

  1. 正規表現を使用して多くのファイルの名前を変更するにはどうすればよいですか?

  2. ファイル内の複数の文字列を見つける方法は??

  3. Linuxで一度に複数のファイルの名前を変更する方法