フォルダの最新ファイルを表示する再帰ディレクトリの検索

フォルダの最新ファイルを表示する再帰ディレクトリの検索

誰が何が間違っているかを指摘できますか?ディレクトリ検索の進行中(フォルダ構造とファイル形式に基づいて)フォルダ構造は、すべての顧客に同じです。顧客フォルダの名前だけが異なります。構造例:

  • httpdocs/client1/channel1/backup
  • httpdocs/client5/channel5/backup
  • httpdocs/client8/channel1/backup

これは部分的に機能し、最新のファイルに対応するバックアップフォルダ内のすべてのファイルを表示します。

#!/bin/bash

# Array of root folders
#folders=("a" "b")
array=(httpdocs/*\/client1/backup/*.xml)

# Search all specified root folders
for dir in "${array[@]}"; 
do echo "$dir";
    # date of each file with "stat"
    find -path $array -type f -exec stat -f "%m,%N" {} ';' | \
        # sort by date, most recent first
        sort -gr | \
        # extract first (most recent) file
        head -1 | \
        # return file name only
        cut -d, -f2
done

ヘッダーが機能していないようです。理由がありますか?私の形式が間違っていますか?

私も次のことを試しました。

find -path "*\/chanel1/backup/*.xml" -type f | sort -gr | head -1 | cut -d, -f2

これにより、リストの最後のフォルダとそのフォルダの最新のファイルのみが出力されます。 (Webルート(Httpdocs)で実行する必要があります)

ベストアンサー1

私は最後の方法に似たものを使用します。

for d in $(find httpdocs -type d -name backup) do ls -t $d | grep '.xml$' | head -1 done

ls -t修正時間に基づいて最新順に並べ替えます。

出力にフルパス名を表示するには、ls -t $d/*.xmlgrepを使用してスキップできます。必要に応じて、単純だが明確ではない方法を使用して、sedやdirnameなどのパス名を減らすことができます。

おすすめ記事