コンテキスト
tar.gzファイルを作成し、それをヘッドレスLinux仮想マシンのdropboxフォルダに転送するバックアップスクリプトを実行しています。
質問
スキームによっては、名前付きファイルの中で最も古いファイルを検索するスクリプトを作成する方法がわかりません/root/Dropbox/apache2-backup-%Y-%m-%d-%H-%M
。
/root/Dropbox-archive/
その後、Dropboxにスペースが2GBしかないので、このファイルをフォルダに移動したいと思います。
ベストアンサー1
「簡単」ソリューション
ls -1 /Dropbox/apache2-backup-*
名前、つまり日付でアルファベット順に並べ替える必要があります(日付は最も重要な数字が左に来るようにフォーマットされているため)。その後、パイプを介して最も古いファイルをインポートできますhead -1
(ファイル名に改行がないとします)。一般的に、パイピングを使用するls
のは悪い考えですが、この場合、ファイル名に特殊文字がないことを知っているので大丈夫です。
mv "$(ls -1 /Dropbox/apache2-backup-* | head -1)" /root/Dropbox-archive/
誤ってファイルを上書きしないようにmv --no-clobber
(または)を代わりに使用することをお勧めします。mv -n
「正しい」ソリューション
特殊文字が本当に心配な場合は、次のものを代わりに使用できます。
to_move="$(find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0 | sort -z | tr '\0\n' '\n\0' | head -1 | tr '\0\n' '\n\0')"
mv "$to_move" /root/Dropbox-archive/
説明する
find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0
:パターン()に一致するサブディレクトリを入力せずに通常のファイル(-type f
)を返します。改行ではなくヌル文字で区切ります。/Dropbox
-maxdepth 1
-name 'apache2-backup-*'
-print0
| sort -z
:タイプNULL文字に基づいています(すべての型がこれを実行できるわけではありません)。| tr '\0\n' '\n\0'
:交換NULL と改行文字はヘッドで処理されます。| head -1
:最初の行に戻ります。| tr '\0\n' '\n\0'
:null 値と改行文字を置き換えます。mv "$to_move" /root/Dropbox-archive/
:動いてみよう!
または1行で:
mv "$(find /Dropbox -maxdepth 1 -type f -name 'apache2-backup-*' -print0 | sort -z | tr '\0\n' '\n\0' | head -1 | tr '\0\n' '\n\0')" /root/Dropbox-archive/