LINUX.ORG.RU

Собрать файлы в одну директорию из # директории с поддериекториями

 ,


0

2

Подскажите нужно чтоб извлекал файлы с расширением только csv

#!/bin/bash

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

# rename: присоединяет char к имени из filename
#         (до расширения, если оно есть)
# rename(filename, char) -> <name><char>[<ext>]
rename()
{
    local filename=$1 char=$2
    echo "$filename" | sed 's/^\([^.]*\)/\1'$char'/'
}

[ $# -eq 2 ] || {
    echo "usage: `basename $0` srcdir save > re" 1>&2
    exit 1
}

srcdir=$1
dstdir=$2

[ -d "$srcdir" -a -d "$dstdir" ] || {
    echo "error: dir doesn't exist" 1>&2
    exit 1
}

find "$srcdir" -type f | sort | while read line; do
    srcfile="$line"
    dstfile="$dstdir/`basename "$line"`"
    while [ -f "$dstfile" ]; do
        dstfile=`rename "$dstfile" "_"`
    done
    echo "moving: $srcfile -> $dstfile"
    /bin/mv "$srcfile" "$dstfile" || {
        echo "error: can't move $srcfile to $dstfile" 1>&2
        exit 1
    }
done


Последнее исправление: iNdexoiD (всего исправлений: 2)

Ответ на: комментарий от iNdexoiD

find «$srcdir» -type f | sort | while read line; do

ну вот, как понял Вы здесь ищите файлы какие-то (-type f), ну и наверно так:

find "$srcdir" -type f -name "*.csv" | sort | while read line; do
NK ★★★★★
()
Ответ на: комментарий от iNdexoiD

Нет не работает.. почувствуй разницу

$ find -maxdepth 1 -type f -iname "1*" -exec echo "file: '{}'" \;
file: './123233'
file: './1234
69684'
$ find -maxdepth 1 -type f -iname "1*" | while read line; do echo "file: '$line'"; done
file: './123233'
file: './1234'
file: '69684'

surefire ★★★
()
Ответ на: комментарий от iNdexoiD

надо вот так

$ find -maxdepth 1 -type f -iname "1*" -print0 | sort -z | while read -d '' line; do echo "file: '$line'"; done
file: './123233'
file: './1234
69684'

surefire ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.