2015-04-09 4 views
1

У меня есть несколько файлов с форматом ReportsBackup-20140309-04-00, и я хотел бы отправить файлы с одинаковым шаблоном в файлы в качестве примера в файл 201403.Переместить файлы в нужную папку в Bash

Я уже могу создать файлы на основе имени файла; Я просто хотел бы переместить файлы на основе имени в их правильную папку.

Я использую это, чтобы создать каталоги

old="directory where are the files" && 
year_month=`ls ${old} | cut -c 15-20`&& 
for i in ${year_month}; do 
    if [ ! -d ${old}/$i ] 
    then 
     mkdir ${old}/$i 
    fi 
done 

ответ

2

вы можете использовать поиск

find /path/to/files -name "*201403*" -exec mv {} /path/to/destination/ \; 
1

Вот как я бы это сделать. Это немного многословно, но, надеюсь, понятно, что программа делает:

#!/bin/bash 
SRCDIR=~/tmp 
DSTDIR=~/backups 

for bkfile in $SRCDIR/ReportsBackup*; do 

    # Get just the filename, and read the year/month variable 
    filename=$(basename $bkfile) 
    yearmonth=${filename:14:6} 

    # Create the folder for storing this year/month combination. The '-p' flag 
    # means that: 
    # 1) We create $DSTDIR if it doesn't already exist (this flag actually 
    #  creates all intermediate directories). 
    # 2) If the folder already exists, continue silently. 
    mkdir -p $DSTDIR/$yearmonth 

    # Then we move the report backup to the directory. The '.' at the end of the 
    # mv command means that we keep the original filename 
    mv $bkfile $DSTDIR/$yearmonth/. 

done 

нескольких изменений, которые я сделал на свой оригинальный сценарий:

  • Я не пытаюсь разобрать вывод ls. Это generally not a good idea. Parsing ls затруднит получение отдельных файлов, которые вам нужны для их копирования в новый каталог.
  • Я упростил вашу строку if ... mkdir: флаг -p полезен для «создания этой папки, если она не существует или не выполняется».
  • Я немного изменил команду slicing, которая получает строку year/month из имени файла.
+0

спасибо большое Я действительно новичок в этом – orp

Смежные вопросы