「nil」さん、ありがとうございます。
> find /* はうまくいっているらしいので、確認するなら論理的には次のようになるでしょう。
$ for d in `ls -A /` ; do echo "=== $d" ; find $d -print >/tmp/find-$d ; done
=== bin
find: bin: No such file or directory
=== cygwin.bat
find: cygwin.bat: No such file or directory
=== cygwin.bat.0d0a
find: cygwin.bat.0d0a: No such file or directory
=== cygwin.ico
find: cygwin.ico: No such file or directory
=== etc
find: etc: No such file or directory
=== home
find: home: No such file or directory
=== lib
find: lib: No such file or directory
=== sbin
find: sbin: No such file or directory
=== tmp
find: tmp: No such file or directory
=== usr
find: usr: No such file or directory
=== var
find: var: No such file or directory
となってしまいます。
$ ls -lta /tmp/f*
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-usr
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-var
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-home
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-lib
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-sbin
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-cygwin.bat.0d0a
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-cygwin.ico
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-etc
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-bin
-rw-r--r-- 1 tanom mkgroup_ 0 Dec 9 19:57 /tmp/find-cygwin.bat
私の1行スクリプトのつなげ方が間違ってるかも。。。
5行そのままコピペしても同じ結果でした。
> どちらかの結果を見れば、どこまではうまくいっているか確認できるし、ERROR の起こる直前の path名か
> ら絞り込める場合が少なくないでしょう。
$ find / -print > /tmp/find-tmp 2>&1
$ find / -type d -print > /tmp/fnd-tmp 2>&1
$ wc -l /tmp/find-tmp
1129 /tmp/find-tmp
$ wc -l /tmp/fnd-tmp
4 /tmp/fnd-tmp
1つめのファイル
$ head /tmp/find-tmp
/
/bin
/bin/822-date
/bin/a2p.exe
/bin/abc2ly
/bin/access.exe
/bin/aclocal
/bin/aclocal-1.7
/bin/addftinfo.exe
/bin/addr2line.exe
$ tail /tmp/find-tmp
/bin/zipgrep
/bin/zipinfo
/bin/zipnote.exe
/bin/zipsplit.exe
/bin/zless
/bin/zmore
/bin/znew
/bin/zsh-4.0.6.exe
/bin/zsh.exe
find: ./.. changed during execution of find
$ ls -la /bin/zsh.exe
-rwxrwxrwx 1 Administ mkgroup_ 11k Nov 28 13:46 /bin/zsh.exe
2つめのファイル
$ cat /tmp/fnd-tmp
/
/bin
/bin/ncurses-test-dll
find: ./.. changed during execution of find
$ ls -ld /bin/ncurses-test-dll
drwxrwxrwx+ 2 Administ mkgroup_ 4.0k Nov 28 13:06 /bin/ncurses-test-dll
> updatedb --prunepaths のように、単に「あるパスを外したい」だけならば、下記のほうが見通しがよい人
> も多いでしょう。
>
> find / -path /cygdrive -prune -o -print
> find / \( -path /home -o -path /usr/bin \) -prune -o -print
なるほど、find のオプション的にはこういう意味なんですね。
書くのが面倒いけど、確かにこうして、
"/" と "\( -path /home -o -path /usr/bin \)" を分けて書いてあった方が意味が分りやすいです。
|