大量のログファイルへのシンボリックリンクを作成しました。ログファイルの構文はyyyymmdd.log.gzです。
物事を簡単にするために、date
で解析せずに単純なシーケンスを使用します。
for dd in $(seq -w 20150101 20151231) ; do
ln -s $Origin/$dd.log.gz $target/$dd.log.gz
done
作成したばかりの壊れたシンボリックリンクを1回ですべて削除するにはどうすればよいですか?
このシンプルな1ライナーは非常に高速で作業を行い、GNU find
が必要です:
find . -xtype l -delete
少し説明:
-xtype l
は、壊れているリンクをテストします(-type
の反対です)
-delete
は、ファイルを直接削除します。xargs
または-exec
をさらに使用する必要はありません。
注:-xtype lは、-xtype小文字[〜#〜] l [〜#〜](link)のように;)
zsh
を使用する(実際にはコードでzsh
構文を使用しています。bash
を使用する場合は、これらの変数を引用符で囲む必要があります):
_rm -- $target/*(-@)
_
または:
_rm -- $target/<20150101-20151231>.log.gz(-@)
_
*(@)
は、タイプsymlinkのファイルに一致します。 *(-@)
は、シンボリックリンク解決後もタイプsymlinkであるもの(つまり、シンボリックリンクのターゲットを解決できないもの)です。これは、GNU find
の_-xtype l
_と同等です。
zsh
とGNU ln
を使用すると、ループを次のように記述します。
_ln -srt $target -- $Origin/<20150101-20151231>.log.gz
_
これは、_$Origin
_に相対パスが含まれている場合でも機能します(そしてOriginの一部のパスコンポーネント(と共通のパスコンポーネント) target)の名前は将来的に変更されます)。