2012-02-17 5 views
0

ディレクトリツリーを再帰的に検索し、最近修正された10個のファイルを取得したい。 これらのファイルのそれぞれについて、/home/mostrecent/ディレクトリにシンボリックリンクを作成します。linux最近変更されたファイルに基づいてシンボリックリンクを作成する

私はこれをスクリプト言語で解決できると知っていますが、私はLinuxコマンドではできないことが少し気になります!どのように私は、スクリプト言語を使用せずに、これらのファイルのそれぞれに対して/home/mostrecentにシンボリックリンクを作成するのです

find /home/myfiles -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort | tail -n 10 | cut -c 32- 

これまでのところ私はこれを持っていますか?

答えて

2

実は、bashコマンドは、あなたが作品を投稿(と、それはようですが、上のベースと仮定すると

:-)でも、コマンドラインからのものの並べ替えを行うことのできるよりスクリプト言語、より多くのです私のぞんざいなテスト)、あなただけ行うことができます。

i=0 
for f in $(CMD) ; do 
    ln -s $f $HOME/recent$i 
    ((i++)) 
done 

あるいは、ワンライナーとして:

i=0;for f in $(CMD);do ln -s $f $HOME/recent$i;((i++));done 

このウィルlホームディレクトリにrecent0recent9のファイルを作成します。これは最新のファイルへのシンボリックリンクです。

明らかに、あなたの実際のコマンドを上記のマーカーテキストCMDを置いた場所に置くべきです。私はマーカーを使っていますので、ここでうまくフォーマットします。


ジャン・ヒューデックだけ

:-)私の意見では、スペースを含まないファイルに対して邪悪なものを動作することを、コメントで指摘するように。しかし、人々はそれらを使用するように見えることから、あなたが使用することができますより安全:

i=0 
CMD | while read f; do 
    ln -s $f $HOME/recent$i 
    ((i++)) 
done 

そして、再び、ワンライナーのバージョン:

i=0;CMD|while read f;do ln -s $f $HOME/recent$i;((i++));done 
+0

これは素晴らしい回答です。ありがとうございます。 – jon

+1

私は 'put-that-c​​ommand-here |読んでいる間f;代わりに行う...」。空白を含むファイルを適切に処理する利点はあります(改行を含むファイルは処理しませんが、スペースはスペースではありません)。シェルがメモリにロードしたくない巨大なリストに対しても機能します一度。 –

+0

それは非常に良い点です、@ジャン、私はあなたの提案を含める答えを調整しました。 – paxdiablo

0

私はSEDでこれを解決しました。

すべて雹sed!あなたの助けのための

ln -s "/home/myfiles/1.simplest" "/home/recent/" 
ln -s "/home/myfiles/2.with space" "/home/recent/" 
ln -s "/home/myfiles/3.with'apostraphe" "/home/recent/" 
ln -s "/home/myfiles/4.with'apostrophe space" "/home/recent/" 

ありがとう:

find /home/myfiles/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort | tail -n 10 | cut -c 21- | sed -e "s/^/ln -s \"/" -e "s/$/\"/" -e "s/$/ \"\/home\recent\/\"/" | sh 

場合、私のパイプsedcat代わりのshには、これが出力されます。

0

はほとんど変更と同じファイル名(もちろんの異なるパス)パックス、ヤンとジョンへ

おかげで、で、最後の24時間に変更され、いくつかの種類のファイルへのシンボリックリンクを作成します...

'最近' ディレクトリ

mkdir ~/recent 

#!/usr/bin/bash 
find $HOME -mtime 0 -name \*.txt -print -o \ 
      -mtime 0 -name \*.pdf -print -o \ 
      -mtime 0 -name \*.extensionname -print -o | while read f; do 
     ln -s $f $HOME/recent/ 
done 

フィルタ... 'getrecentfiles.sh' を作成し、追加してください:

-mtime(N * 24時間)は時間であります(n = 1は24-48時間前に変更されたファイルのみを表示します)

-oは複数ファイルのOR演算子です(既定値はAND)

実行可能ファイルに変更し、スタートアップスクリプトに追加し、デスクトップ上の〜/ recentへのショートカットを作成して、手元にある最新のファイルを入手してください!

関連する問題