bash脚本将word附加到文件名

时间:2013-09-30 20:22:51

标签: bash filenames

我正在尝试将“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

关于如何修复它的任何想法?

2 个答案:

答案 0 :(得分:3)

  1. 以下变量扩展${file%%}很奇怪,因为它什么都不做:

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

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

    mkdir -p“$(dirname”$ {newfilename}“)”

  3. 也许你想要做的事情:

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

答案 1 :(得分:2)

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

也许您想将dicom追加到$file

的末尾
mv "$file" "${file}_dicom"

或类似的东西。