
誰が何が間違っているかを指摘できますか?ディレクトリ検索の進行中(フォルダ構造とファイル形式に基づいて)フォルダ構造は、すべての顧客に同じです。顧客フォルダの名前だけが異なります。構造例:
- 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/*.xml
grepを使用してスキップできます。必要に応じて、単純だが明確ではない方法を使用して、sedやdirnameなどのパス名を減らすことができます。