【问题标题】:bash script to append word to filenames将单词附加到文件名的 bash 脚本
【发布时间】:2013-09-30 20:22:51
【问题描述】:

我正在尝试将单词“dicom”附加到一组文件夹中许多文件名的前面。这些文件夹都以“s”开头(在下面的脚本中用“s*”表示),每个文件夹都包含许多文件(下面用“*”指定)——我希望所有这些文件都可以使用这个来更改bash 脚本。我试着运行这个:

for file in /Volumes/USB_AIB/DICOMFunCurrentBatch/MOVr1unzip/s*/*
  do
  mv $file dicom${file%%}
done

但收到了数千行以下错误(每个文件夹中的每个文件一次——这只是其中一个示例):

mv: rename /Volumes/USB_AIB/DICOMFunCurrentBatch/MOVr1unzip/s307_1/29217684 to dicom/Volumes/USB_AIB/DICOMFunCurrentBatch/MOVr1unzip/s307_1/29217684: No such file or directory

关于如何解决它的任何想法?

【问题讨论】:

    标签: bash filenames


    【解决方案1】:

    我没有dicom/Volumes/USB_AIB/DICOMFunCurrentBatch/MOVr1unzip/s307_1/这样的有效路径,为什么要在开头加上dicom

    也许您想将dicom 附加到$file 的末尾?

    mv "$file" "${file}_dicom"
    

    或类似的东西。

    【讨论】:

    • 需要附加到文件名。谢谢
    【解决方案2】:
    1. 以下变量扩展${file%%} 很奇怪,因为它什么都不做:

      ${parameter%%word} : 移除最长匹配的后缀模式。

    2. 将文件移动到路径应该存在的目录中,创建路径:

      mkdir -p "$(dirname "${newfilename}")"

    也许你正在尝试做的事情:

    for file in /Volumes/USB_AIB/DICOMFunCurrentBatch/MOVr1unzip/s*/*
    do
        mv "$file" "${file%/*}/dicom${file##*/}"
    done
    

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2012-07-07
      • 2023-03-16
      • 1970-01-01
      • 2017-04-07
      相关资源
      最近更新 更多