ファイル拡張子のみ変更[重複]

ファイル拡張子のみ変更[重複]

ファイルone.PDFをに変更するための簡単なシェルスクリプトを作成していますone.pdf。このファイルを Task1 というフォルダに保存します。

私のスクリプトはTask1と同じディレクトリにあります。Shell1.sh実行すると、Task1はTask1.pdfになりますが、one.PDFのファイルは変わりません。反対が必要ですが、私が試していることは何も機能しないようです。構文エラー、忙しいリソースのためにmvが移動されない、またはディレクトリ名を変更することの間で交互に表示されます。

誰かが私が間違っていることを教えてもらえますか?

#!/bin/bash
#shebang for bourne shell execution
echo "Hello this is task 1"
 #Initial prompt used for testing to see if script ran
#/rename .* .pdf *.pdf // doesnt work

#loop to iterate through each file in current directory and rename
for file in Task1;
do
        mv "$file" "${file%.PDF}.pdf"
done

答え1

globbing を使用してファイル名を取得します。

for file in Task1/*; do mv ...; done

正確にするには、次のファイルのみを使用してください.PDF

for file in Task1/*.PDF; do mv ...; done

より正確には、ディレクトリではなくファイルを扱っていることを確認してください。

for file in Task1/*.PDF; do [ -f "$file" ] && mv ...; done

ちなみに、パラメータ拡張パターンは大丈夫です。

答え2

基本的なシェルコマンドに加えて、ほとんどのLinuxディストリビューションには、単一のコマンドrenameで複数のファイルの名前を変更するための優れたツールがあります。

rename 's/PDF/pdf/' Task1/*

これに関する良い記事は次のとおりです。名前変更 - Linuxで複数のファイルの名前を変更するコマンドラインツール

答え3

ディストリビューションがrenameutil-linuxのCコマンド(Arch Linuxなど)の場合:

rename PDF pdf Task1/*PDF

PDFファイルの終わり以外の場所に「PDF」文字列が含まれていない場合example_PDF_file.PDF

関連情報