Bash: перемещение нескольких файлов в подпапки - PullRequest
1 голос
/ 04 мая 2011

У меня есть папка с несколькими тысячами файлов, и я хочу переместить их в подпапки в соответствии со строкой в ​​имени файла.Все файлы имеют структуру типа

что-то-run1_001.txt

что-то-run22_1243.txt

Поэтому я попробовал следующий скрипт, чтобы переместить все файлы с помощью «run1»"в нем в подпапку r1 и все файлы" run22 "в подпапке r22 (и т. д.), но это не работает, и я получаю сообщение" Файл 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 ]

5 голосов
/ 04 мая 2011
for i in {1..39}
do
  mkdir -p r${i}/
  mv *run${i}_* r${i}/
done
1 голос
/ 04 мая 2011

эта работа как ваше требование?

mv *run*.html dir1

0 голосов
/ 04 мая 2011

Если вы все еще сталкиваетесь с ловушкой «слишком много аргументов», вы можете найти ее в цикле 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
}
...