递归查找 *.c 文件用于 dos2unix 处理

gat*_*ack 0 find

目标是使用以下命令处理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)

And*_*ton 5

当您搜索通配符(例如*.c)时,您确实应该将它包含在单引号中。当您向上移动一个目录时,我猜您进入了一个目录,其中至少有两个以 . 结尾的文件.c,其中一个是random.c. 在这种情况下,bash 扩展*.c到匹配的文件。

假设目录包含hi.crandom.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

  • 或者`find ~/csim -type f -name '*.c' -exec dos2unix -f {} +` 以避免管道。 (2认同)