web-dev-qa-db-ja.com

ファイルの拡張子のみを変更する

ファイルを変更する簡単なシェルスクリプトを作成しています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
9
Callat

ファイル名を取得するには、グロビングを使用します。

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

ちなみに、パラメータ拡張パターンは問題ありません。

16
heemayl

基本的なシェルコマンドのほかに、ほとんどのLunuxディストリビューションには、単一のコマンドで複数のファイルの名前を変更することができるNiceツールrenameがあります。

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

これについての素晴らしい記事を以下に示します。 Rename – Linuxで複数のファイルの名前を変更するためのコマンドラインツール

4
Rafał Krypa

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

rename PDF pdf Task1/*PDF

これは、PDFファイルに文字列「PDF」が末尾以外の場所に含まれていない限り機能します。例:example_PDF_file.PDF

1