いくつかの画像とビデオを含むギャラリーフォルダがあり、その一部は修正日が正確で、一部は月が間違っています。特定のフォルダ内のすべてのファイルを変更し、月を1月から6月(または他の同様の組み合わせ)に変更するスクリプトを作成したいと思います。例:
私の画像の日付は次のとおりです(名前ではなくEXIFメタデータ)。
05-Jan-2011
06-Jan-2011
07-Jan-2011
など...
年と日付を同じに保ち、すべての月を1月ではなく6月に変更したいと思います。
したがって、名前の代わりにEXIFメタデータになります。
05-Jun-2011
06-Jun-2011
07-Jun-2011
など....
どうすればいいですか?
よろしくお願いします。
ベストアンサー1
更新:私の答えが間違っている場合はすぐにお知らせください。
file system's modification date
メタデータがメタデータと同じかどうかはわかりませんexitf modification date
。テストしましたが、exiftool
日付は同じであるため、それを使用してそのメタデータを操作できるようですtouch
。
解決策:
まず、次のコマンドを使用してファイルの変更日を取得する必要がありますstat
。
filedate=$(stat -c '%y' "/path/to/file" | cut -d' ' -f1)
今月は別の月に置き換えられます。これにはawkを使用できます。
newDate=$(awk -v month="Jun" -F '-' '{print $1"-"month"-"$3}' <<< $filedate )
次のコマンドを使用してtouch
変更日を変更できます。
touch -m -d $newDate /path/to/file
#-m argument is used to change modification time
#-d is used to specify the new date
最後に、ファイルを再帰的に変更するには、find
スクリプトファイル内の以前に提供されたコードを使用できます。
スクリプト.sh:
#! /usr/bin/env bash
filedate=$(stat -c '%y' "$1" | cut -d' ' -f1)
newMonth="Dec" #here you specify the month
newDate=$(awk -v month=$newMonth -F '-' '{print $3"-"month"-"$1}' <<< $filedate )
touch -m -d $newDate $1
以下をfind
使用できます。
find /path/to/your_directory -type f -exec ./script.sh {} \;
findコマンドで月を指定するには、それをscript.shに引数として渡します。
これでコードは次のようになります。
スクリプトファイル
#! /usr/bin/env bash
filedate=$(stat -c '%y' "$1" | cut -d' ' -f1)
newMonth="$2"
newDate=$(awk -v month=$newMonth -F '-' '{print $3"-"month"-"$1}' <<< $filedate )
touch -m -d $newDate $1
検索コマンド
find . -type f -exec ./script {} "Nov" \;