1

我有几百个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,而只使用文件名。

4

3 回答 3

4

怎么样:

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

在abs阅读更多关于它的信息。

于 2012-07-28T14:48:07.490 回答
0
dir=$(echo ${i[@]::-4})

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

dir=$(echo ${i::-4})
于 2012-07-28T14:57:27.540 回答
0

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

FILE="测试.rar"

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

--> 测试

于 2012-07-28T15:00:08.950 回答