我已经使用wget 获取了整个网站模板。例如,它在不同的子目录中创建了许多资产文件,其中文件名包含问号./fonts/fontawesome-webfont.woff?v=4.5.0。我需要?从这些文件名中截断其余部分。我试过这个命令:
find . -type f -name '*\?*' -exec mv "{}" "$(echo {} | sed 's/\?.*//g')" \;
Run Code Online (Sandbox Code Playgroud)
但它不起作用;没有替换/删除任何内容,它显示此错误:
mv: './fonts/fontawesome-webfont.woff?v=4.5.0' and './fonts/fontawesome-webfont.woff?v=4.5.0' are the same file
Run Code Online (Sandbox Code Playgroud)
我在不同的目录中有这些类型的文件名,所以我尝试了find命令。我在这里错过了什么?
这是一个防弹的。
find . -name '*\?*' -type f -exec sh -c '
for fp; do
fn=${fp##*/}
echo mv "$fp" "${fp%/*}/${fn%%\?*}"
done' sh {} +
Run Code Online (Sandbox Code Playgroud)
上面的循环隔离了每个选定文件的名称(在变量 named 中fn),以便能够在不破坏任何内容的情况下删除最左边的问号和其余部分;如果我们这样做${fp%%\?*},我们将无法处理名称中带有问号的目录的内容。不过,如果我们确定每个文件名只包含一个问号,那${fp%\?*}就没问题了。
echo如果输出看起来不错,则删除。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |