Bash:将多个文件移动到子文件夹中
我有一个包含数千个文件的文件夹,我想根据文件名中的字符串将它们移动到子文件夹中。这些文件都具有如下结构 something-run1_001.txt something-run22_1243.txt 因此,我尝试了以下脚本,以便将其中包含run1的所有文件移动到子文件夹r1中,并将所有run22文件移动到子文件夹r22中,以此类推,但这样做无效,我得到一条消息:文件X与文件X相同Bash:将多个文件移动到子文件夹中,bash,find,move,Bash,Find,Move,我有一个包含数千个文件的文件夹,我想根据文件名中的字符串将它们移动到子文件夹中。这些文件都具有如下结构 something-run1_001.txt something-run22_1243.txt 因此,我尝试了以下脚本,以便将其中包含run1的所有文件移动到子文件夹r1中,并将所有run22文件移动到子文件夹r22中,以此类推,但这样做无效,我得到一条消息:文件X与文件X相同 #!bin/bash for i in {1..39} do foldername=r$i #echo "$fol
#!bin/bash
for i in {1..39}
do
foldername=r$i
#echo "$foldername"
mkdir $foldername
find . -type f -name "*run$i_*" | xargs -i mv {} $foldername/
done
如何解决这个问题?这项工作符合您的要求吗
mv*run*.html dir1这项工作符合您的要求吗
mv*run*.html dir1如果您仍然遇到太多参数的陷阱,您可以通过管道将其放入while循环中
#!/bin/bash -u
find . -maxdepth 1 -name '*-run*_*.txt' |
{
while read FNAME
do
N=${FNAME##*-run}
N=${N%_*}
DIR=r$N
test -d $DIR || mkdir $DIR
mv $FNAME $DIR/.
done
}
如果仍然遇到太多参数的陷阱,可以将find导入while循环
#!/bin/bash -u
find . -maxdepth 1 -name '*-run*_*.txt' |
{
while read FNAME
do
N=${FNAME##*-run}
N=${N%_*}
DIR=r$N
test -d $DIR || mkdir $DIR
mv $FNAME $DIR/.
done
}
很容易。。。我以前也尝试过类似但不一样的方法,结果陷入了太多争论的陷阱。太容易了。。。我以前尝试过类似但不相同的方法,但遇到了太多的参数陷阱。我认为我首先遇到它的原因是我没有将${I}与额外的{}一起使用。我已经对此进行了广泛的测试,阿塞里克的解决方案成功了。find是一个非常强大的东西,但是,我可能应该读一些关于它的文章……我认为我首先遇到它的原因是我没有将${I}与额外的{}一起使用。我已经对此进行了广泛的测试,阿塞里克的解决方案成功了。发现是一个非常强大的东西,但是,我应该读一点关于它。。。