在将文件上传到 Amazon S3 静态托管区域之前,重命名通过 Bash 中的“wget --mirror”获取的文件

在将文件上传到 Amazon S3 静态托管区域之前,重命名通过 Bash 中的“wget --mirror”获取的文件

我正在尝试将旧网站存档并上传到静态托管的 Amazon S3 区域。

我能够wget使用以下命令获取内容:

wget --mirror --no-parent --html-extension --page-requisites http://original.com

然后,我可以通过以下方式将所有链接替换为新的 URL:

ag -l original\.com -0 | xargs -0 sed -i '' \
's|original.com|old.original.com|g'

此后,我使用将网站上传到 Amazon S3 s3cmd sync

我现在唯一的问题是,所有“缓存破坏”的资产现在在亚马逊上都被拒绝访问。问题是,wget我的文件在文件名中包含查询参数,我需要重命名它们。

所以我想在所有子文件夹中递归重命名文件,例如:

  • style.css?ver=4.2.5.css重命名为style.css

我如何使用 Bash 3.2 在 Mac OS X 中做到这一点?

答案1

这应该有效:

find . -maxdepth 1 -type f -name '*\?*' |\
  while read FILENAME
  do
    IFS='?'
    SPLIT_FILENAME=(${FILENAME})
    unset IFS
    echo mv "${FILENAME}" "${SPLIT_FILENAME}"
    # mv "${FILENAME}" "${SPLIT_FILENAME}"
  done

表示find .所有操作都发生在当前目录及其子目录中;您可以随意将其更改.为您正在执行操作的完整/实际文件路径。查找名称中-name '*\?*'带有问号 ( ) 的文件。?

此初始/演示版本也设置-maxdepth为“1”,因此该过程不会在您的文件系统上失控,并且它使用echo该命令的某个版本向您展示在您实际运行它之前它会做什么。

如果您运行该程序并且输出看起来不错,请随意调整-maxdepth 1为类似的内容-maxdepth 9,甚至完全删除它,然后注释掉该echo行并取消注释该mv行,使其看起来像这样:

find . -type f -name '*\?*' |\
  while read FILENAME
  do
    IFS='?'
    SPLIT_FILENAME=(${FILENAME})
    unset IFS
    # echo mv "${FILENAME}" "${SPLIT_FILENAME}"
    mv "${FILENAME}" "${SPLIT_FILENAME}"
  done

使用您的测试文件示例style.css?ver=4.2.5.css,我在 Mac OS X 10.9.5(Mavericks)系统上运行此脚本时获得了以下输出:

mv ./style.css?ver=4.2.5.css ./style.css

对我来说这似乎是一个很好的转变。使用真实mv命令运行它,文件成功重命名为style.css。这也适用于包含空格的文件,例如this is my style.css?ver=4.2.5.css和这样的测试文件my style.css?ver=4.2.5.css

答案2

?假设URL/原始文件名中只有一个字符,那么这将在 Mac OS X 上运行:

find . -name "*\?*" -exec sh -c 'var="{}" ; mv "{}" "${var%\?*}"' \;

作为参考,这也可以在rename安装了该工具的 Linux 系统或任何系统上运行:

find . -name "*\?*" -exec rename "s/\?.*//" "{}" \;

答案3

我将使用 echo 来演示。

# echo 'style.css?ver=4.2.5.css' | cut -d? -f2-9999
ver=4.2.5.css

递归:

cd <yourdir>
for f in *; do
    newf=$( echo $f | cut -d? -f2-9999 )
    mv $f $newf
done

假设:<yourdir>仅包含您想要更改的文件。如果不是,请更改 globfor f in *以适应。您应该先用 echo 测试最终命令,即替换mv $f $newfecho $f $nf并确保它能达到您的要求。

相关内容