拡張子を変更するには、mvを使用して複数のファイルの名前を変更します。

拡張子を変更するには、mvを使用して複数のファイルの名前を変更します。

拡張子を変更するためにファイル名を変更したいと思います。効果的に完了しようとしています。

mv *.txt *.tsv

しかし、これを行うと、次のような結果が得られます。

*.tsv はディレクトリではありません。

mv最初の10回のGoogleクリックマークがこのように機能することが少し奇妙だと思います。

ベストアンサー1

これがあなたの質問に対する答えではないことを知っていますが、回避策ループではなくファイル名を変更する別の方法を探している場合はfind?私は何十万ものファイルを含む大規模ディレクトリのファイル拡張子を置き換えるためにこのコマンドを複数回使用しました。これはすべてのPOSIX互換システムで機能します。

find . -name "*.gappedPeak" -exec sh -c 'mv "$1" "${1%.gappedPeak}.bed"' _ {} \;

コマンド分析:

  1. '.'=>' で示される現在のディレクトリから始まる検索パス。 '

  2. -name=>照会一致名の設定(この場合で終わるすべてのファイル .gappedPeak

  3. -exec=> 各ゲームで次のコマンドを実行します。

  4. sh -c=> 'exec'はゲームごとに別々のシェル環境を作成します。

  5. mv "$1" "${1%.gappedPeak}.bed"=>mv最初の変数(次のように表現されます)1)(現在のファイル名)が新しい名前に変更されます。ここでは部分文字列のマッチングを実行して削除するので、最初のvarを再取得します。1文字列から削除するために使用されます%.gappedPeak最後の.bed変数は、残りの変数(以下の例では、)を連結して新しいファイル名を作成します。testNumber.bedtestNumber.bed

  6. 下線はプレースホルダです。$0

  7. {}は、コマンドで見つかった*.gappedPeak各()ファイル名に置き換えfindられます。1shコマンドに。

  8. \;コマンドの終わりを表示します-exec';'またはを使用することもできます";"

例:

[user@before]# ls -lh
total 0
-rw-r--r--. 1 root root 0 Jan 26 11:40 test1.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test2.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test3.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test4.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test5.gappedPeak

[user@after]# ls -lh
total 0
-rw-r--r--. 1 root root 0 Jan 26 11:40 test1.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test2.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test3.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test4.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test5.bed

おすすめ記事