📄 00000003.htm
字号:
<BR> 与 <BR> <BR> find . -type f ... -ok rm '{}' \; <BR> <BR> "..." 是一堆用以辨识档案名称的述词,譬如在找出一有问的档案的 <BR> inode 为何後,用 <BR> <BR> find . -num 12345 -ok rm '{}' \; <BR> <BR> 或 <BR> <BR> find . -inum 12345 -ok mv '{}' new-file-name \; <BR> <BR> 删除或改名。 选项 "-ok" 是告诉 find 要执行指令前先要求你确认 <BR> 。若你能确定所下的指令没有问题,或者怕所要处理档案有奇怪的字 <BR> 元印出来会使萤幕乱七八糟,那用选项 "-exec" 就不会先要求你的确 <BR> 认。 <BR> <BR> 那当档案名称里含有 '/' 时要怎麽办呢? <BR> <BR> 这类档案是很特别的情形,并且只会因为 kernel 的 bug 而发生(通 <BR> 常是在写 NFS 的时候,没有把从远端机器来的档案名称中不合规定的 <BR> 字元过滤掉)。我们第一件要做的事情就是,试著去了解为什麽这个 <BR> 问题会如此奇怪。 <BR> <BR> UNIX 的目录其实就只是单纯的档名和 inode number 的成对组合。 <BR> 举例来说,目录包含了如下的资讯: <BR> <BR> filename inode <BR> <BR> file1 12345 <BR> file2.c 12349 <BR> file3 12347 <BR> <BR> 理论上,只有 '/' 和 '\0' 两个字元不能用在档案名称中, <BR> 因为它们有以下的特殊用途: <BR> <BR> '/' :用来分隔目录名称及档案名称。 <BR> '\0' :用来当档名的终结字元。 <BR> <BR> 非常、极端、很不幸的,某些厂商做出来的 NFS 在回应远端机器的要 <BR> 求时,会很白痴地造出含有斜线(/)的档名。例如,当某人在 Mac <BR> 或其他非 Unix 机器透过 NFS 造一个以日期为名称的档案到你的 <BR> Unix 中。那麽,你的 Unix 目录看起来可能就会像这个样子: <BR> <BR> filename inode <BR> <BR> 91/02/07 12357 <BR> <BR> 我们前面所提过的 'find' 或 'rm' 都无法删除这个档案,因为这些或 <BR> 其他的 Unix 程式都会强制把 '/' 当作前述的分隔字元解释。 <BR> <BR> 其实,任何一般的程式都会试著做 unlink("91/02/07"),而这对 <BR> kernel 来说,它的意义是 "unlink 目录 91 下的子目录 02 中的档 <BR> 案 07",但是,我们并没有这样的档案,我们有的是一个名叫 <BR> "91/02/07" 的档案在目前的目录中。这是个极细微但极重要的区别。 <BR> <BR> 这时该怎麽办呢?首先,先回到产生这种乱七八糟档名的 Mac,试试 <BR> 看 NFS daemon 要不要让你改成不含 '/' 的档名。如果不行,那就得 <BR> 找你的系统管理者帮忙了。请他试试以下几种方法之一: <BR> <BR> 1. 用 "ls -i" 找出档案的 inode number,umount 掉这个 <BR> file system 然後以 "clri" 将这个 inode 清除,然後 <BR> 祈求“fsck" 的成功。这个作法会删除这乱七八糟档名的 <BR> 档案。 <BR> <BR> 2. 若还想保存这个档案的资料,试试以下的做法: <BR> <BR> -在那乱七八糟档名的档案所在之目录的亲目录底下建一 <BR> 个子目录,将旧的目录下能搬动的档案都搬到新的目录 <BR> 里。 <BR> -以 "ls -id" 取得旧目录的 inode number <BR> -unmount 掉这个 file system, 用 "clri" 清掉那个 <BR> 目录的 inode <BR> -"fsck" 那个 file system <BR> -从新 mount 上那个 file system <BR> -将新的目录改名为旧的目录名 <BR> -从 lost+found 下找回那个档案,改个好名字,放回原 <BR> 来的目录。 <BR> <BR> 3.若你有一个叫做 "fsdb" 的程式,那你可以试试看喽! <BR> <BR>------------------------------ <BR> <BR>Subject: How do I get a recursive directory listing? <BR>Date: Thu Mar 18 17:16:55 EST 1993 <BR> <BR>2.3) 我要如何列出整个目录树呢? <BR> <BR> 底下有几种做法自己挑一个吧: <BR> <BR> ls -R (not all versions of "ls" have -R) <BR> find . -print (should work everywhere) <BR> du -a . (shows you both the name and size) <BR> <BR> 若你要找的是特定的档案,例如说是档名结尾为 ".c" 者,可用 <BR> <BR> find . -name '*.c' -print <BR> <BR> "find" 是一个很强很好用的程式。值得一学。 <BR> <BR>------------------------------ <BR> <BR>Subject: How do I get the current directory into my prompt? <BR>Date: Thu Mar 18 17:16:55 EST 1993 <BR> <BR>2.4) 要怎麽设定 prompt 才会显示出目前所在的目录? <BR> <BR> 这得视你的 shell 而定。有些 shell 很容易,有些 shell 很难,有些根 <BR> 本办不到。 <BR> <BR> C Shell (csh): <BR> <BR> 将以下的东西加入你的 .cshrc 里。 <BR> <BR> alias setprompt 'set prompt="${cwd}% "' <BR> setprompt # to set the initial prompt <BR> alias cd 'chdir \!* && setprompt' <BR> <BR> 假如你有用 pushd 与 popd, 把底下的东西也加进去。 <BR> <BR> alias pushd 'pushd \!* && setprompt' <BR> alias popd 'popd \!* && setprompt' <BR> <BR> 若你的 C shell 没有 $cwd 这个变数,那就得用 `pwd` 代替之。 <BR> <BR> 若你想要的只是 prompt 里有目前所在目录的最後一个成分 <BR> ("mail%" 而非 "/usr/spool/mail%") 则用 <BR> <BR> alias setprompt 'set prompt="$cwd:t% "' <BR> <BR> 有些旧版的 csh 将 && 和 || 的意义弄反了。你可以试试看: <BR> <BR> false && echo bug <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -