CentOS / cPanelサーバーには24000個のイメージを持つディレクトリ(currdir)があります。
日付に基づいて、このディレクトリのイメージを別のディレクトリ(またはcurrdir内のサブディレクトリ)に移動してこのディレクトリを分割したいと思います。
達成する方法?
ベストアンサー1
find
これにより、最後に変更された時刻に基づいてディレクトリ内のファイルを移動するシェルコマンドを出力するコマンドが実行されます。ディレクトリにターゲットを動的に作成します(mkdir -p
ディレクトリがすでに存在する場合は失敗しません)。生成されたコマンドはシェルインタプリタに直接パイプされます。
find . -maxdepth 1 -type f -printf "mkdir -p %CY/%Cm/%Cd && mv -- '%f' %CY/%Cm/%Cd\n" | sh
(GNUを述語find
と仮定-printf
)。
最後の修正時刻に置き換えられます(通常はファイルの寿命をより正確に示す%C
)%T
コンテンツファイルのメタデータが変更されると、変更時間も更新されます。
これは、ディレクトリを作成し、ファイルを移動するために多くのプロセスを生成するので、最も効率的な方法ではないかもしれません。これは処刑だからあまり集中しません…
ファイル名に'
文字が含まれていないとします(これが保証されていない場合は、コマンドインジェクションの脆弱性になります)。
-x
オプション(または-o xtrace
)を渡しsh
て実行中のアクションを表示するか-e
(または-o errexit
)を渡して、最初のエラーが終了するようにすることができます(たとえそれを使用してもそのアイテムを交換したい場合、または-e
そうでなければ失敗は無視されます)。&&
;
mkdir