2011-05-04 60 views
1

我有一对夫妇一千文件的文件夹,我想根据文件名的字符串将它们移动到子文件夹。这些文件均具有类似的结构击:移动多个文件到子文件夹

东西,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 

如何解决这个问题?

回答

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

那么容易......我试过类似的东西(但不同样)之前,遇到了“太多争论”的陷阱。 – 2011-05-04 11:11:31

1

是这项工作作为您的要求?

mv *run*.html dir1

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 
} 
+0

我认为我首先遇到它的原因是我没有使用额外{}的$ {i}。我已经广泛地测试了这一点,因为埃里克的解决方案伎俩。发现是一个非常强大的东西,但是,我应该仔细阅读一下它... – 2011-05-04 14:05:41

相关问题