【问题标题】:Move files into their own directories将文件移动到自己的目录中
【发布时间】:2012-07-28 14:37:07
【问题描述】:

我有几百个 rar 文件。我想为每个 rar 文件创建一个目录,然后将文件移动到新创建的目录中。

这是我用来创建rar的代码

#!bin/bash
for f in *; do 
rar a -s -m5 "${f%.*}.rar" "$f";
done

这是我用来移动文件的代码。

#!/bin/bash
for i in *.rar; do
dir=$(echo "$i" | \
sed 's/\(.\)\([^ ]\+\) \([^ ]\+\) - \(.*\)\.pdf/\1\/\1\2 \3/')
dir="DestinationDirectory/$dir"
mkdir -p -- "$dir" && mv -uv "$i" "$dir/$i"
done

问题是它使用扩展名创建目录。

ie: file irclog3_26_198.rar is moved into folder /DestinationDirectory/irclog3_26_1988.rar/irclog3_26_1988.rar

我希望创建文件夹时忽略 .rar,只使用文件名。

【问题讨论】:

  • 相同的结果文件被移动到 /DestinationDirectory/file.rar/file.rar 我确实看到我的代码有一个错误或在它说 pdf 的 sed 模式中,但我已经修改了在我的脚本副本中。
  • 您的正则表达式与您的文件命名方式完全无关。它似乎旨在匹配名称中间带有“ - ”的pdf文件。

标签: linux bash ubuntu


【解决方案1】:

怎么样:

dir="${dir%.rar}"
mkdir -p -- "$dir" ...

通过abs了解更多信息。

【讨论】:

    【解决方案2】:
    dir=$(echo ${i[@]::-4})
    

    ${name[@]:pos:len})获取字符串/数组的子字符串/子数组,对于字符串,可以避免[@]

    dir=$(echo ${i::-4})
    

    【讨论】:

      【解决方案3】:

      可以使用普通的bash shell参数扩展https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

      FILE="TEST.rar"

      回显“${FILE%%.*}”

      --> 测试

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 2013-04-14
        • 2012-03-08
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多