Linux 将文件移动到它们自己的目录中

Linux 将文件移动到它们自己的目录中,linux,bash,ubuntu,Linux,Bash,Ubuntu,我有几百个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/'

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

如何:

dir="${dir%.rar}"
mkdir -p -- "$dir" ...
更多信息,请访问。

如何:

dir="${dir%.rar}"
mkdir -p -- "$dir" ...
在网站上阅读更多关于它的信息

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

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

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

可以使用普通bash shell参数expension

FILE=“TEST.rar”

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


-->TEST

您可以使用普通bash shell参数expension

FILE=“TEST.rar”

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


-->测试

相同的结果文件被移动到/DestinationDirectory/file.rar/file.rar我确实看到我的代码有一个错误,或者在sed模式中显示为pdf,但我已经在脚本副本中修改了它。您的正则表达式与文件的命名方式完全无关。它的设计似乎是为了将pdf文件与“-”匹配在文件名的中间。同样的结果,文件被移动到/DestialStord/Fiel.RAR/Fiel.RAR中,我确实看到我的代码有一个错误或在SED模式中说PDF,但是我已经在我的脚本拷贝中修改了。它似乎被设计成与名字中间的“--”匹配PDF文件。