〜、〜/PathA(gitディレクトリ)、〜/PathBには2つのリンクされたディレクトリがあります。 ~/PathA は ~/PathB のサブディレクトリです。これら2つは別の物理ディスクに接続されています。 ~/PathA/config/~ 以下のファイルに多くのファイルをリンクしました。このリンクされたファイルをすべて探したいです。「xxxxx -> yyyyy」形式を表示します。
この方法は、古い/他のコンピュータの設定ファイルを使用するときによく使用されます。
スクリプトを書いたりパイプを使うと簡単にできますが、少し見苦しいです。しかし、私は単に使用したいと思う探す注文すればできます。
編集:多くのテストの終わりに見つけました。最も重要なこと-l 名前そして-印刷。
▶ find ~ -type l ! -path '/home/eexpss/磁盘' ! -path '/home/eexpss/bin' -lname '/home/eexpss/bin/config/*' -printf "%p -> %l\n"
/home/eexpss/.local/share/applications -> /home/eexpss/bin/config/.local+share+applications
/home/eexpss/.local/share/nautilus/scripts -> /home/eexpss/bin/config/.local+share+nautilus+scripts
/home/eexpss/.vimrc -> /home/eexpss/bin/config/fedora.vimrc
/home/eexpss/.proxy.pac -> /home/eexpss/bin/config/.proxy.pac
/home/eexpss/.bash_aliases -> /home/eexpss/bin/config/fedora.bash_aliases
/home/eexpss/.icons -> /home/eexpss/bin/config/.icons/
find: ‘/home/eexpss/磁盘/lost+found’: Permission denied
find: ‘/home/eexpss/磁盘/eexp/.gvfs’: Permission denied
/home/eexpss/.vim -> /home/eexpss/bin/config/.vim
/home/eexpss/.gitconfig -> /home/eexpss/bin/config/.gitconfig
私はStéphane Chazelasの答えを受け入れます。ありがとうございます。
答え1
Standardは、find
見つかったファイルに関する情報を(フルパスを除く)独自に印刷することはできません。ただし、一部のfind
実装ではこれを拡張します。
たとえば、GNU find
(最も一般的で伝統的なGNU / Linuxディストリビューションにあります)の場合:
find ~ -type l -printf '%p -> %l\n'
再帰的に検出されたシンボリックリンクに対して要求された形式でシンボリックリンクを印刷します(物理巡回(つまり、ホームディレクトリのディレクトリへのシンボリックリンクに従わない)。一部の実装には、find
から情報を抽出できるのと同様の-ls
形式で出力する述語もあります。ls -li
一つ作りたいならロジックナビゲーション(ディレクトリへのシンボリックリンクに従う)し、情報を印刷します。find
1回の呼び出しだけではこれを行うことはできませんが(GNUの場合でも)、globbingを使用してディレクトリを参照し、GNUのみを使用して情報を印刷できますfind
。zsh
find
find ~/***/*(D@) -printf '%p -> %l\n'
あるいは、任意のシェルとGNUを使用してくださいfind
(ただし、複数の呼び出しが必要です)。
find -L ~ -xtype l -exec sh -c '
exec find "$@" -printf "%p -> %l\n"' sh {} +
シンボリックリンクを探す最後に一部を指す既存のファイル~/bin/config
(コンポーネント~/bin/config
自体がシンボリックリンクではないと仮定)はまだ次のようになりますzsh
。
find ~/**/*(D@e{'[[ $REPLY:A = ~/bin/config/* ]]'}) -printf '%p -> %l\n'