知道为什么这个命令不起作用吗?顺便说一句,我正在尝试删除当前目录中所有 csv 文件的扩展名。
find -type f -iname "*.csv" -exec mv {} $(basename {} ".csv") \;
Run Code Online (Sandbox Code Playgroud)
尝试了许多变体,包括参数扩展、xargs ...即使如此,一切都徒劳无功。
hol*_*ill 10
这应该做:
find ./ -type f -iname "*.csv" -exec sh -c 'mv {} $(basename {} .csv)' \;
Run Code Online (Sandbox Code Playgroud)
find能够{}用它的结果替换,因为引号阻止执行子 shell,直到find完成。然后它执行该-exec部分。
你的问题为什么不工作是$(basename {} ".csv")在子shell(-> $())中执行并预先评估的。如果我们逐步查看命令执行,您将看到会发生什么:
find -type f -iname "*.csv" -exec mv {} $(basename {} ".csv") \;- 你的命令find -type f -iname "*.csv" -exec mv {} {} \;- subshell 被评估($(basename {} ".csv")返回,{}因为它解释{}为文字)find -type f -iname "*.csv" -exec mv {} {} \;- 正如你现在所看到的:移动实际上没有任何作用