ファイル名に修正時間を追加

ファイル名に修正時間を追加

ファイルの作成日とファイル名を追加する必要があります。たとえば、Testファイルの作成日が2017年3月22日の場合は、test_rbc_22032017に変更する必要があります。個々のファイルに対して操作を実行できますが、指定されたディレクトリにn個のファイルの名前を変更するスクリプトを作成する方法がわかりません。以下を試してみましたが、運がありませんでした。

for f in /path ; do mv -n ""$f"_RBS_(date -r "$f" +"%Y%M%D")"; done

しかし幸運はありません。解決策を提案してください

答え1

コマンドにはいくつかの問題があります。

for f in /path ; do mv -n ""$f"_RBS_(date -r "$f" +"%Y%M%D")"; done
  • for f in /path一度だけ繰り返されます(f=使用/path)。おそらく、ディレクトリ内のすべてのファイルをfor f in /path/*考慮したいと思うでしょう(サブディレクトリのファイルを検討したい場合は、これは別の質問です)。/path/

  • mv2つのパラメータが必要です。ソースは明らかにです"$f"。ターゲットは変換された名前でなければなりません。

  • $コマンドの置き換えで何かを逃しました$(...)

  • 書式文字列がdate説明と一致しません(分と単純な日付ではなく、月と日が必要な場合があります)。

  • 作成日ではなく修正日を使用しています。作成日はほとんどのファイルシステムタイプでは保持されません。そのままにします。

  • あなたの説明は、ファイル名を小文字にしたいことを意味します。

上記を修正した後(使用する日付を選択することに加えて)、私たちは次のように終わります。

for f in /path/* ; do mv -n "$f" "${f,,}_rbc_$(date -r "$f" +'%d%m%Y')"; done

考慮すべきもう1つのことは、同じ場所でこれを複数回実行する場合は、ファイルを別のディレクトリに移動するか、すでに適切なサフィックスがあるかどうかをテストする必要があることです(新しいサフィックスを追加する前に削除)。このファイルを変更せずにそのままにしてください。)

答え2

1つ目は、mvコマンドにソースとターゲットが必要なので、1つだけ提供することです。

以下は、年に%Y、月に%m、日に%dが必要な情報に基づく日付形式です。man dateシーケンス間の違いの説明については、リファレンスを参照してください。

for f in /path3番目のポイントは、参照ファイル()ではなくパス()のみを提供することですfor f in /path/*。したがって、有効な例は次のとおりです。

for f in /path/*; do mv -n "$f" "${f}_$(date -r "$f" +'%Y%m%d')"; done

答え3

これを試してみて、状況に合わせて調整してください。 now=$(date +"%m_%d_%Y") file="/nas/backup_$now.sql"

だから動作する必要があります:for f in /path ; do mv -n "$f" "${f}_RBS_$(date +"%m_%d_%Y")"; done

答え4

これが最善の方法です。

次のスクリプトは、指定されたディレクトリにあるn個のファイルのファイル生成日を追加するために使用されます。

#!/bin/bash

path="/home/modassir/data/"
listoffiles=$(ls -1 /home/modassir/data)


for f in $listoffiles; do
   file=$(date -r $path$f +'%d%m%Y-%H:%M:%S')
   mv $path''$f'' $path''$f''_rbc_''$file''
done;

/home/modassir/dataディレクトリ名

関連情報