目标是使用以下命令处理find
*.c 文件dos2unix
:
find . -name *.c | xargs dos2unix -f
Run Code Online (Sandbox Code Playgroud)
尝试对上述命令进行故障排除:
user@host:~/csim/exercise$ find . -name *.c
./6-1/dinph_3p.c
./6-1/dinph_pi.c
./9-2/lift.c
./6-4/cmptr.c
./8-7/station.c
./7-4/hire.c
./5-2/ran_test.c
./8-4/cmptrm.c
./9-5/trunked.c
./8-5/computer.c
./9-3/aloha.c
./12-3/mcpu.c
./10-5/abp_pi.c
./6-2/dinph_3p.c
./6-2/dinph_pi.c
Run Code Online (Sandbox Code Playgroud)
为什么当 BASH 上移一个目录时:
$ cd ..
Run Code Online (Sandbox Code Playgroud)
相同的命令至少不会返回上面列出的 .c 文件?
user@host:~/csim$ find . -name *.c
find: paths must precede expression: random.c
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)
当您搜索通配符(例如*.c
)时,您确实应该将它包含在单引号中。当您向上移动一个目录时,我猜您进入了一个目录,其中至少有两个以 . 结尾的文件.c
,其中一个是random.c
. 在这种情况下,bash 扩展*.c
到匹配的文件。
假设目录包含hi.c
和random.c
,那么
find . -name *.c
Run Code Online (Sandbox Code Playgroud)
变成:
find . -name hi.c random.c
Run Code Online (Sandbox Code Playgroud)
包含*.c
在单引号中将导致 shell 不展开它。
要查找下的每个.c
文件~/csim
并使用以下方法进行处理dos2unix
:
find ~/csim -type f -name '*.c' | xargs dos2unix -f