ファイル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
ディストリビューションがrename
util-linuxのCコマンド(Arch Linuxなど)の場合:
rename PDF pdf Task1/*PDF
PDFファイルの終わり以外の場所に「PDF」文字列が含まれていない場合example_PDF_file.PDF
。