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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [РЕШЕНО]Массовая архивация фалов по писку find  (Прочитано 741 раз)

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

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
Но за архивировать файлы массова и по отдельности. Данные файлы разбросаны по директориям. По этому я из положения вышла вот вот так.
*.nes <---  Это ром для денди игр у меня их очень много. По названию они лежат в папках по алфавиту. И по цифрам.
find ./ -name '*.nes' | xargs -n 1 -I % zip -m -9 '%.zip' '%' 
Данная команда работает до пары до времени хорошо потом выдает ошибку
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
Почему так не знаю вроде все верно.
-----------
Коротко расскажу что он делает.
find ищет в директории где он находится файлы с расширением *.nes
потом он передает часть xargs,а вот он уже подставляет пути  где лежит файл и куда его сохранять символом %
Ну как работает zip я думаю все знаю  -m это удаление исходного файла после сжатия а  -9 это уровень сжатия.
Таким образом он каждый файл пукнет отдельно.
(Нажмите, чтобы показать/скрыть)

------------
Но из-за выскакивания вот этой ошибки у команда перестает работать. И дальше не работает пока я не перейду в другую директорию. Там он работает потом вылетает такая же ошибка.
Не спорю выход из положение не лучший но мне пока ничего умного, в голову не пришло. Если предложите вариант лучше буду благодарна.

Пользователь добавил сообщение 30 Мая 2016, 21:05:35:
Нашла на форуме вот этот сообщение
livanda,
Скрипт:
Код: (bash) [Выделить]
#!/bin/bash

# Полный путь к директории с файлами
SRC_DIR="/path/to/dir"

IFS=$'\n'
for FILE in $(find "$SRC_DIR" -type f ! -empty ! -iname "readme.txt" ! -iname "info.txt" \( -iname "*.txt" -o -iname "*.fb2" \) -print); do
FILE_NAME="$(basename -z "$FILE")"
cd "$(dirname -z "$FILE")" || { echo "Error"; continue; }
zip "$FILE_NAME".zip "$FILE_NAME" && rm "$FILE_NAME"
done

Скрипт найдет в директории SRC_DIR и всех поддиректориях файлы *.txt и *.fb2 (кроме пустых, readme.txt и info.txt) запакует каждый файл в zip, и удалит исходный файл не изменяя при этом структуру каталогов.

(Нажмите, чтобы показать/скрыть)
PS: Проверен. Работает.

все проблемы нет
« Последнее редактирование: 21 Октября 2016, 15:28:16 от Punko »

 

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