私は現在オペレーティングシステムのコースを受講しており、このコースの一部としてbashスクリプトを書く方法を学んでいます。スクリプトを介してサブディレクトリに触れることなく、ディレクトリ内のすべてのファイルに日付を追加する必要があります。私はすべてのファイルに日付を追加する1行のスクリプトを書いてきましたが、現在のディレクトリのフォルダにも適用されます。
for f in *; do mv -- "$f" "$f-$(stat -c %Y "$f" | date +%Y%m%d)"; done
これにより、ファイル名の末尾に日付が追加されますが、前述のようにその下のディレクトリに到達します。私は現在RedHatLinuxでbashバージョン4.1.2を使用しています。
Unixの経験が少なく(私は主にWindowsユーザーです)、誰もがここにいるので混乱しています。どんな助けでもいただければ幸いです。
ベストアンサー1
slmがすでに指摘したように、$f
通常のファイルをテストできます。学びながらスクリプトを一行ではないものに変更する予定ですが、読んで維持するのが難しくなる傾向があります。
for f in *
do
if [ -f "$f" ]
then
mv -- "$f" "$f-$(stat -c %Y "$f" | date +%Y%m%d)"
fi
done
(;
後で改行を挿入して削除することで縮小できます)
引数が通常のファイル(デバイスまたはディレクトリではない)かどうかをテストします-f
。他のテストもあります(たとえば、ディレクトリの場合でもテスト-d
できます)。if [ ! -d "$f" ]