find /tmp -type l -exec ls -l出力の $TARGET_NAME 値と正確に一致させるにはどうすればよいですか?
$ find /tmp -type l -exec ls -l 2>/dev/null {} +
lrwxrwxrwx 1 root root 24 Mar 18 12:41 /tmp/test/link -> /usr/admin/Collect_tests
lrwxrwxrwx 1 root root 43 Mar 18 12:41 /tmp/test/link1 -> /usr/admin/Collect_tests/Upload.CM@.www.com
lrwxrwxrwx 1 root root 68 Mar 18 12:41 /tmp/test/link2 -> /usr/admin/Collect_tests/Upload.CM@.www.com/Upload_Shema@@@.DATA.com
lrwxrwxrwx 1 root root 100 Mar 18 12:42 /tmp/test/link3 -> /usr/admin/Collect_tests/Upload.CM@.www.com/Upload_Shema@@@.DATA.com/List.files.emails.dummy*Printed
lrwxrwxrwx 1 root root 92 Mar 18 12:42 /tmp/test/link4 -> /usr/admin/Collect_tests/Upload.CM@.www.com/Upload_Shema@@@.DATA.com/List.files@emails.dummy
値の例
TARGET_NAME=Upload.CM@.www.com
TARGET_NAME=Upload_Shema@@@.DATA.com
TARGET_NAME=List.files.emails.dummy*Printed
Target: print: "link name" と "PATH" (最後のフィールド) は、$TARGET_NAME が最後のフィールドの単語と正確に一致する場合のみ。
例 (正確に一致させたい場合 - while TARGET_NAME =Upload_Shema@@@.DATA.com then):
結果は次のように表示されます
/tmp/test/link2 /usr/admin/Collect_tests/Upload.CM@.www.com/Upload_Shema@@@.DATA.com
/tmp/test/link3 /usr/admin/Collect_tests/Upload.CM@.www.com/Upload_Shema@@@.DATA.com/List.files.emails.dummy*Printed
/tmp/test/link4 /usr/admin/Collect_tests/Upload.CM@.www.com/Upload_Shema@@@.DATA.com/List.files@emails.dummy
いくつかの条件があります:
1) 最後のフィールドのみを一致させる必要がある (ls -l
出力から)
例
/usr/admin/Collect_tests/Upload.CM@.www.com
2) $TARGET_NAME 値は単語全体と一致する必要があります
完全一致の例 ( while TARGET_NAME=Upload.CM@.www.com ):
/usr/admin/Collect_tests/Upload.CM@.www.com
非完全一致の例:
/usr/admin/Collect_tests/Upload.CM@.www.c
3) $TARGET_NAME の左側にバックスラッシュ ("/") が存在し、$TARGET_NAME の右側にバックスラッシュまたは文字列の末尾が存在する必要があります。
4) 特殊文字を次のようにエスケープする必要があります: " / " , " @ " . 「 * 」など
5) コードは ksh スクリプトの一部になります (Perl oneliner、AWK、ksh などで実装できます。)
例
find /tmp -type l -exec ls -l 2>/dev/null {} + | < Perl one liner .............. >