私はLinuxを使用しており、2つのディレクトリを使用して2番目のディレクトリを最初のディレクトリに移動し(2番目のディレクトリは最初のディレクトリのサブディレクトリになります)、2番目のディレクトリのすべてのファイルは「.txt」に展開されます。例: 以下をdir2
含みます。
file1
file2
dir3
file3.jmp
走ったら./shell_scrip dir1 dir2
dir1
含む 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
コマンドが失敗した場合にスクリプトが終了し、状況が予期したとおりに表示されない場合に少しの保護が提供されます。mv
cd
表現は名前にピリオドがないようです${f%.*}
。$f
それ以外の場合は、ピリオド(最後のピリオド)とその後のすべての内容が削除されます。