Bash:将多个文件移动到子文件夹中

时间:2011-05-04 10:56:46

标签: bash find move

我有一个包含几千个文件的文件夹,我想根据文件名中的字符串将它们移动到子文件夹中。这些文件都具有类似

的结构

东西-run1_001.txt

东西-run22_1243.txt

所以我尝试了下面的脚本,以便将包含“run1”的所有文件移动到子文件夹r1和子文件夹r22中的所有“run22”文件(依此类推),但它没有那样工作,我得到了消息“文件X与文件X相同”。

#!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

如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

for i in {1..39}
do
  mkdir -p r${i}/
  mv *run${i}_* r${i}/
done

答案 1 :(得分:1)

这是你的要求吗?

mv *run*.html dir1

答案 2 :(得分:0)

如果你仍然遇到“太多参数”陷阱,你可以通过管道查找到一个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
}