ディレクトリ内のすべてのファイルの拡張子をどのように変更しますか?

ディレクトリ内のすべてのファイルの拡張子をどのように変更しますか?

私はLinuxを使用しており、2つのディレクトリを使用して2番目のディレクトリを最初のディレクトリに移動し(2番目のディレクトリは最初のディレクトリのサブディレクトリになります)、2番目のディレクトリのすべてのファイルは「.txt」に展開されます。例: 以下をdir2含みます。

file1
file2
dir3
file3.jmp

走ったら./shell_scrip dir1 dir2dir1含む dir2次のようになりますdir2

file1.txt
file2.txt
dir3
file3.txt

拡張子を変更しようとしましたが、次のエラーが発生しました。

mv: cannot stat `file1`: No such file or directory

次のコードを使用してください。

#!/bin/sh
for file in $2/*;
do
f=$(basename "$file")
mv "$f" "${f}.txt"
done

答え1

dir2を移動または参照していません。次のようにしてみてください。

#!/bin/sh
mv "$2" "$1"  ||  exit               # Make $2 a subdirectory of $1
cd "$1/$(basename "$2")"  ||  exit   # Change directories for simplicity
for f in *; do
    mv "$f" "${f%.*}.txt"            # Add or change the extension
done

コマンドの後に追加すると、|| exitコマンドが失敗した場合にスクリプトが終了し、状況が予期したとおりに表示されない場合に少しの保護が提供されます。mvcd

表現は名前にピリオドがないようです${f%.*}$fそれ以外の場合は、ピリオド(最後のピリオド)とその後のすべての内容が削除されます。

関連情報