Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Переименование и последующее копирование файлов. bash  (Прочитано 1590 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ampermetr

  • Автор темы
  • Активист
  • *
  • Сообщений: 491
    • Просмотр профиля
Есть каталог А с 1000 файлов, разбросанных по десятку подкаталогов. Требуется скопировать файлы в каталог В. Додумался только до такого:
#! /bin/bash
cd /home/user/1
#DIR1=/home/user/1
DIR2=/home/user/2
E=$DIR2/1.txt
MAX=? #как посчитать количество строк в файле $E?
COUNT=1
touch $DIR2/1.txt
find ./ -type f | sed 's|.*/||' >> $E
while (( COUNT <= MAX )) ; do
NAME=$(sed -n '$COUNTp' $E) #получаем имя первого файла(в виде NAME=$(sed -n '1p' $E) строка срабатывает)
#echo $NAME
NEWNAME=$NAME-$(date +%H:%M:%S)
mv ./$NAME ./$NEWNAME
let COUNT+=1
done
find ./ -type f -exec cp '{}' $DIR2 \; #копирует все файлы в каталоге

Есть вопросы по строкам 6-как посчитать количество строк в файле-списке файлов?
11-как подставить переменную вместо числа в функцию sed?
14-получаю ошибку вида: mv: указанная цель «абв» не является каталогом
Подскажите как исправить эти ошибки?
Женский форум,топик "Плакала всю ночь, подскажите из-за чего?"
Линукс форум, топик "Всю ночь собирал генту, подскажите зачем?"

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Ampermetr, нужно найти все файлы и скопировать их в другую директорию без сохранения пути? Все файлы в одной директории?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Ampermetr

  • Автор темы
  • Активист
  • *
  • Сообщений: 491
    • Просмотр профиля
Да. В принципе чтобы просто скопировать, достаточно последней строки. Но если файлы имеют одинаковые имена, они пропускаются при копировании. Вот за этим и нужно сначала переименовать все файлы,а уже потом копировать.

Пользователь решил продолжить мысль 30 Марта 2015, 09:35:15:
Нашел еще одну новую ошибку и исправил её.
#! /bin/bash
cd /home/user/1
DIR1=/home/user/1
DIR2=/home/user/2
E=$DIR2/1.txt
R=$DIR2/2.txt
MAX=? #как посчитать количество строк в файле $E?
COUNT=1
touch $DIR2/1.txt
touch $DIR2/2.txt
find ./ -type f | sed 's|.*/||' >> $E
while (( COUNT <= MAX )) ; do
find ./ -type f > $R
DIR3=$(sed -n '$COUNTp' $R)
cd $DIR3
NAME=$(sed -n '$COUNTp' $E) #получаем имя первого файла(в виде NAME=$(sed -n '1p' $E) строка срабатывает)
#echo $NAME
NEWNAME=$NAME-$(date +%H:%M:%S)
mv ./$NAME ./$NEWNAME
let COUNT+=1
cd $DIR1
done
find ./ -type f -exec cp '{}' $DIR2 \; #копирует все файлы в каталоге
« Последнее редактирование: 30 Марта 2015, 09:35:15 от Ampermetr »
Женский форум,топик "Плакала всю ночь, подскажите из-за чего?"
Линукс форум, топик "Всю ночь собирал генту, подскажите зачем?"

 

Страница сгенерирована за 0.015 секунд. Запросов: 22.