1

私のシェルスクリプトは90日古いすべてのファイルを見つけます

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90

次のような出力を返します

/var/www/html/zip/data/2011/jan/11/333333/Photos/a.jpeg

/var/www/html/zip/data/2011/jan/11/333333/Photos/b.jpeg

/var/www/html/zip/data/2011/jan/11/333333/Photos/c.jpeg

/var/www/html/zip/data/2011/feb/11/333333/Photos/a.jpeg

/var/www/html/zip/data/2011/feb/11/333333/Photos/b.jpeg

同じFindコマンドを使用して上記の出力から一意のフォルダーパスを取得するために何をする必要があるので、出力は次のようになります

/var/www/html/zip/data/2011/jan/11/333333/Photos

/var/www/html/zip/data/2011/feb/11/333333/Photos

したがって、上記の検索コマンドに何かを追加する必要があると思いますが、何がわかりません

注:一意のパスを変数に保存したい

4

4 に答える 4

3

試す

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq 
于 2012-11-29T08:06:01.737 に答える
1

findこれを直接実行できるかどうかはわかりませんがsed、結果の後処理にはいつでも使用できます。

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90  | sed 's|/[^/]*$||'

結果をさらにパイプするuniqと、重複が削除されます (最初に を実行する必要があるかもしれませんがsort、私はそれを疑っています)。

于 2012-11-29T08:05:38.393 に答える
0

jonathanasdfの答えに加えて、

forループを追加することもできます。

$i=1;
for uniq_dir in `find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq`;
do
a[$i]=$uniq_dir;
let "i = $i + 1";
done;
于 2012-11-29T08:30:56.413 に答える
0

この方法で解決策を見つけることができます

find /var/www/html/zip/data -type d -mtime +90 | uniq

この背後にある考え方は、フォルダー内のファイルが更新または変更されるたびに、フォルダーも変更済みとしてマークされるということです。したがって、この場合、過去 90 日間に更新されなかったすべてのフォルダーを取得します...

于 2012-11-29T08:29:30.617 に答える