
現在のディレクトリのファイルがタイムスタンプで変更されるようにするには、これを行う必要があります。最初はうまくいきますが、もう一度実行するとファイルに別のタイムスタンプが追加されます。タイムスタンプを追加するのではなく、置き換える方法が必要です。
#!/bin/sh
IFS='
'
time=$(date)
for file in *
do
mv $file "$file""$time"
done
古いファイルをどのように上書きするのか悩んでいますが、タイムスタンプで変更すると名前が変更されるため、方法が浮かびません。
答え1
ファイル名の日付の現在の部分を変更し、それを変更する必要があります。これは、ファイル名の基本名部分を解析する直接的な文字列操作アクティビティです。現在の命名規則に関する詳細情報がないと、実行する操作に対する一般的なアプローチ以外に、実際にはどのような解決策も提供できません。
はい
ファイル名が次のとおりであるとします。ちょっと_..日付..
for file in *
do
basefile=${file/_*//}
mv "$file" "$basefile""$time"
done
それ以降のすべての内容を_
切り取って$basefile
。
名前
$ echo "$file"
blah_Sun Oct 27 15:20:58 EDT 2013
$ echo ${file/_*//}
blah/
答え2
1つの方法は、同じディレクトリにあるファイルの元のファイル名を保持することです。 forループからファイルを読み取る代わりに、次のwhileループを使用してファイル名を読み取り、名前にタイムスタンプを追加できます。
while read file
do
mv $file$(date)
done < "files.txt"
files.txt
たとえば、 で生成でき、ls > files.txt
実際のスクリプトまたはコマンドラインから別のスクリプトを実行する前に、このコマンドを一度だけ実行する必要があります。