MV

MV

完全に自信があるわけではありませんが、mvと(asrenameで)の違いは何ですか?正規表現を許可し、正規表現を許可しないことに加えて、どちらかの利点がありますか?私は同時に複数のファイル名を変更することも可能だと思いますが、そうしないでください。util-linux-ng 2.17.2/usr/bin/renamerenamemvrenamemv

man私は彼らのページで、または自分自身の調査を通して、他の何がそれらをユニークにするかについての明確な表示を見つけることができません。

答え1

どちらも基本的にふたに書かれた内容です。

mv標準ユーティリティです到着移動する1 つ以上のファイルを指定された宛先に送信します。移動するファイルが1つしかない場合は、ファイルの名前を変更するために使用できます。複数のmv場合、ターゲットがディレクトリの場合にのみ機能し、ファイルをそこに移動します。

したがって、mv foo barファイルをfooディレクトリに移動するかbar(存在する場合)、名前を変更しますfoobar存在barしない場合、またはディレクトリではない場合)。mv foo1 foo2 bar2つのファイルだけがそのディレクトリに移動され、ディレクトリでbarbarない場合は警告が発生します。

mvファイルを移動するためにCライブラリ関数が呼び出されrename()、機能しない場合(別のファイルシステムに移動)、ファイルをコピーして元のファイルを削除します。

複数のファイルの名前を変更することがすべての場合は、mvシェルループを使用する必要があります。ウェブサイトにこれに関する質問がたくさんあります。これこれ他の人


一方、各種rename公益事業名前を変更するファイルを個別に。

renameユーティリティLinuxから記載されている内容は、およびにrename foo bar *変更するなどの単純な文字列置換を実行します。foobarbarbarasdffooasdfbarもちろんいいえただし、正規表現を使用してください!

Perlの名前変更ユーティリティまたはそれに伴う様々なケース)はPerl式を使用してファイル名を変換します。次のコマンドを使用する可能性が最も高いです。s/pattern/replacement/模様 はい正規表現。

util-linux の名前変更と Perl の名前変更はどちらも、ファイル名を適切に変更してファイルを別のディレクトリに同時に移動するために使用できますが、これは少し厄介です。両方ともrename()ファイルを呼び出すので、あるファイルシステムから別のファイルシステムに移動することは機能しません。

renameあなたが持っているものが何であるかについては、ディストリビューションによって異なる場合がありますおよび/またはあなたがインストールしたコンテンツ。ほとんどはサポートされているので、rename --versionそれを使用して何を持っているかを確認してください。

答え2

mvファイル名を変更するだけです(他のファイルシステムまたはパスに移動することもできます)。古い名前と新しい名前を指定すると、ファイルは新しい名前または新しい場所に変更されます。

renameバッチの命名を変更するために使用されます。

foo000.logthrough 1000個のファイルがあり、それをthroughfoo999.logに変更したいとします。bar000.logbar999.log

これを行うmv必要があります。そうでない場合はスクリプトを作成します。mv foo000.log bar000.logmv foo001 bar001.log

rename簡単にすると、織りrename foo bar foo*.log、数千のファイルがすぐに変更されます!とても素敵です。

詳細については、このページをもう一度確認してくださいman rename

答え3

MV

これは、1つのことをうまく実行するように設計された基本的なコマンドラインです(Unix哲学)。ファイルまたはディレクトリの移動

STDOUT&¹ をハッキングしてターゲット文字列を動的に変更できますが、STDINこれは単にスマートなハッカーではありません

名前変更(パール)

これを行うこともできないかもしれない同じ名前の他のツールがあるので注意してください。

人々が話すとき、rename私たちはこれELFより強力な(魔法?)ことを考えます。

基本ではなくPerlです。これは非常に強力ないくつかのPerl機能を提供することができます。

次の例を考えてみましょう。

欲しい名前を変更する次のファイルの束

foobar_1.txt
foobar_2.txt
foobar_3.txt

次のように数字の前にゼロを追加できますsprintf()(正規表現を使用するとPerlです:D)。

rename 's/(\d+)/sprintf("%04d", $1)/e' foobar_*.txt

これで、次のことができます。

foobar_0001.txt
foobar_0002.txt
foobar_0003.txt

これは基本命令ではありませんか?

実際にはデザインされていません。ディレクトリの移動しかし、次のようにすることができます。

$ mkdir -p /tmp/foo/bar/base
$ touch /tmp/foo/bar/base/file
$ rename 's!/tmp/foo/bar/base/file!/tmp/file!' /tmp/foo/bar/base/file

移動したファイル

/tmp/file

*.stackexchange.*¹ ウェブサイトに表示されるコードの一部

for FILE in `ls *.txt`
do
    mv ${FILE} `echo ${FILE} | sed 's/anything_ugly/anything_still_ugly/'`
done

この道ではありません。これは、適切な瞬間に適切なツールを使用する理由を説明するための明らかな間違いです。

答え4

MVファイルとディレクトリを移動するか、名前を変更してバックアップします。名前を変更するファイルの名前を変更するだけです。

MVより多くの機能とオプションがあります。機能的な違いについては、各スイッチのマニュアルページを確認してください。使い方を見てみましょう男性Ubuntu 18.04LTS(各パッケージのバージョンによって状況が異なる場合があります):

mvオプション(ヘルプとバージョンを省略)

   --backup[=CONTROL]  
          make a backup of each existing destination file  

   -b     like --backup but does not accept an argument  

   -f, --force  
          do not prompt before overwriting  

   -i, --interactive  
          prompt before overwrite  

   -n, --no-clobber  
          do not overwrite an existing file  

  If you specify more than one of -i, -f, -n, only the final one takes effect.  

   --strip-trailing-slashes  
          remove any trailing slashes from each SOURCE argument  

   -S, --suffix=SUFFIX  
          override the usual backup suffix  

   -t, --target-directory=DIRECTORY  
          move all SOURCE arguments into DIRECTORY  

   -T, --no-target-directory  
          treat DEST as a normal file  

   -u, --update  
          move only when the SOURCE file is newer than the destination file or when the destination file is missing  

   -v, --verbose  
          explain what is being done  

   -Z, --context  
          set SELinux security context of destination file to default type  

オプションの名前変更(ヘルプとバージョンを省略)

   -s, --symlink   
          Do not rename a symlink but its target.  

   -v, --verbose  
          Show which files where renamed, if any.  

   -n, --no-act  
          Do not make any changes.  

   -o, --no-overwrite  
          Do not overwrite existing files.            

関連情報