ファイルを変更する簡単なシェルスクリプトを作成しています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
ファイル名を取得するには、グロビングを使用します。
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
ちなみに、パラメータ拡張パターンは問題ありません。
基本的なシェルコマンドのほかに、ほとんどのLunuxディストリビューションには、単一のコマンドで複数のファイルの名前を変更することができるNiceツールrename
があります。
rename 's/PDF/pdf/' Task1/*
これについての素晴らしい記事を以下に示します。 Rename – Linuxで複数のファイルの名前を変更するためのコマンドラインツール 。
ディストリビューションのrename
がutil-linux(Arch Linuxなど)からのCコマンドの場合:
rename PDF pdf Task1/*PDF
これは、PDFファイルに文字列「PDF」が末尾以外の場所に含まれていない限り機能します。例:example_PDF_file.PDF
。