
私は複数のログファイルへのシンボリックリンクを作成しました。ログファイルの構文はyyyymmdd.log.gz
。
簡単にするために、次のように解析するのではなく、単純なシーケンスを使用していますdate
。
for dd in $(seq -w 20150101 20151231) ; do
ln -s $origin/$dd.log.gz $target/$dd.log.gz
done
作成したばかりの壊れたシンボリックリンクを一度に削除するにはどうすればよいですか?
答え1
答え2
find -L /path -type l -exec rm -i {} \;
を使用して-L
シンボリックfind
リンクに沿ってテストを評価します-type
。リンクに正常に従うと、そのリンクは次のようになります。いいえ壊れて-type l
テストが間違っています(リンクが解決する内容について評価されるため)。リンクをたどることができない場合、リンクは切断され、テストは真に-type l
なります。
-type l
テストが成功すると、切断された-exec rm {} \;
リンクが削除されます。
主にLinuxユーザーにはGNUismの使用を推奨し-xtype l
、Solaris、FreeBSDなど、GNU以外のUNIXシステムには適していません。
答え3
With(実際にはコードで構文を使用しますzsh
。withではこれらの変数を引用する必要があります):zsh
bash
rm -- $target/*(-@)
または:
rm -- $target/<20150101-20151231>.log.gz(-@)
*(@)
一致ファイル形式シンボリックリンク。*(-@)
それでもタイプです。シンボリックリンクシンボリックリンクの確認後(つまり、シンボリックリンクの宛先を確認できない場合)、これはGNUfind
と同じです-xtype l
。
zsh
GNUでは、ln
ループを次のように書くことをお勧めします。
ln -srt $target -- $origin/<20150101-20151231>.log.gz
相対パスを含めて相対シンボリックリンクを作成しても、$origin
次の場合にシンボリックリンクが壊れる危険性が減ります。起源(そしてターゲット)は将来の名前が変更される予定です。
答え4
以下は、指定されたタイムスタンプで誤ったコマンドが原因ですべての壊れたリンクが生成された場合にうまく機能します。
ls -lrt | grep "Sep 17 15:06" | awk '{print $9}' | xargs \rm