web-dev-qa-db-ja.com

ファイル/ディレクトリ名にタイムスタンプを追加する

タイムスタンプが追加されたファイルまたはディレクトリをファイル名/ディレクトリ名にコピーするスクリプトを作成しようとしています

何かのようなもの:

cover.jpg --> cover_18-01-2014_17:37:32.jpg
directory --> directory_18-01-2014_17:37:32

タイムスタンプをfilename/dirnameに追加する方法がわかりません。誰か助けてもらえますか?

タイムスタンプ

now="$(date +'%d-%m-%Y_%T')"
1
zdarsky.peter

その後、自分でスクリプトを書くことができました

#timestamp
now="$(date +'%d-%m-%Y_%T')"

filename=$(basename "$1") 

cp -r "$1"  "$2"

if [ -f "$1" ]; then
   extension="${filename##*.}"
   name="${filename%.*}" 
   mv -f "$2/$filename" "$2/${name}_${now}.$extension"
else
   mv -f "$2/$filename" "$2/${filename}_${now}"
fi
0
zdarsky.peter

正規表現が\|演算子をサポートするpax実装の場合:

now=$(date +%F_%T)
pax -rw -"s@/\(\([^/]*\)\(\.[^/]*\)\|\([^/.]*\)\)@/\2\4_$now\3@g" . /dest/

代わりに2014-01-18形式を使用することを強くお勧めします。これは明確であり、辞書式順序と時系列で同じように並べ替えられるためです。

paxがなく、GNU tarがある場合は、代わりに次のように記述できます。

tar -cf - --transform="s@/\(\([^/]*\)\(\.[^/]*\)\|\([^/.]*\)\)@/\2\4_$now\3@g" . |
  (cd /dest && tar xf -)

どちらの場合も、そこにシンボリックリンクがある場合、置換はシンボリックリンクのターゲットにも適用され、すべてのリンクターゲットが./some/thingの形式でない限り、適切に実行される可能性は低くなります。

2

デバッグしようとしているスクリプトを追加すると役に立ちますが、これが私が行うことです。スラッシュの後に続くパスを含めて、スクリプトに2つの引数を指定する必要があります(簡潔にするために検証を入力しません)。

 $ datestamp-cp.sh/path/to/source// path/to/destination /

日付スタンプの内容-cp.sh

#/ bin/env sh 
 SRC = $ 1 
 DST = $ 2 
 NOW = $(date + '%d-%m-%Y_%T' )
 
 for F in `ls $ SRC`; do 
 EXT = `rev $ F | cut-d。 -f1` 
 NAM = $ {F ## *。} 
 cp -r $ SRC $ F $ DST $ NAM- $ NOW。$ EXT 
完了

各ファイルに移動された正確な時刻(タイムスタンプと一致)を持たせたい場合は、NOW =行をFORループ内に移動します。

スクリプトを実行可能にすることを忘れないでください

 chmod u + xdatestamp-cp.sh 
  • これはSudoコードであり、テストされていません
0
ir0h