在这个find命令中,$ 1是如何工作的? 我找不到任何关于它在做什么方面的例子或文档。 这来自一个问题“删除当前工作目录中的所有文件扩展名。”
find `pwd` -type f -exec bash -c 'mv "$1" "${1%.*}"' - '{}' \;
find `pwd` -type f -exec bash -c 'mv "$1" "${1%.*}"' - '{}' \;
bash -c 'mv "$1" "${1%.*}"' - '{}'
对于每个找到的文件,find
将会用找到的文件的路径名替换 {}
:
bash -c 'mv "$1" "${1%.*}"' - '/path/to/filename.ext'
bash
然后以 $0
设置为 -
(使其成为登录 shell)并将 $1
设置为 /path/to/filename.ext
的方式执行 mv "$1" "${1%.*}"
。应用替换后,结果如下:
mv /path/to/filename.ext /path/to/filename
bash -c
中 $0
只是用作进程的名称。 - Benjamin W.bash -c 'echo $0; shopt login_shell' -
- 这表示它不是登录 shell。另一方面,bash --login -c 'echo $0; shopt login_shell' whatever
是一个登录 shell,尽管 $0
不以 -
开头。你也可以在 .bash_profile
中放置一个 echo
语句,并查看何时执行:只有使用 --login
时才会执行。我看到 $0
实际上是 -bash
的登录 shell 唯一的时间是通过 Ctrl+Alt+F1 可达的虚拟控制台。 - Benjamin W.
find $(pwd) -type f …
而不是find `pwd` -type f …
。当然,在当前情况下,这并不重要,但现在养成良好的习惯将在真正需要时受益无穷。 - Jonathan Lefflerfind "$(pwd)" ...
确保使用字面目录名称,而不是将其置于单词拆分或路径名扩展的影响下。 - chepner