Как узнать, завершена ли файловая операция через bash-скрипт?

Возможно, я выполнил некоторую операцию копирования / перемещения, включающую большие или много файлов. В bash я хотел бы намекнуть, что эта операция окончена. Могу ли я что-нибудь сделать?

enter image description here

Сначала я подумал, что ожидание на пиде должно помочь. Поэтому во время одной из таких операций я запустил top и обнаружил, что mount.ntfs забирает большую часть процессора. Однако, опубликуйте эту файловую операцию (после того, как диалоговое окно автоматически исчезнет), этот процесс все еще выполняется.

Следовательно, я исключил это. Любые идеи о том, как я могу узнать, когда моя ОС закрыла этот диалог?

1
задан 15 January 2018 в 15:08

5 ответов

  • Первым шагом является проверка завершения операции копирования. Я думаю, что вы уже проверили этот шаг.

  • Вторым шагом является проверка того, что буферы сброшены (что буферизованные данные в ОЗУ наконец-то записываются на целевое устройство, так что содержимое файла действительно сохраняется в файле в разделе на диске).

    Вы можете запустить sync, чтобы очистить буферы. Когда sync выполнено и bash возвращается к запросу, этот второй шаг также завершен.


  • Существует инструмент для мониторинга операций чтения / записи, iotop. Установите его с помощью

    sudo apt install iotop
    

    и запустите, например, с помощью следующей командной строки

    sudo iotop -o
    
1
ответ дан 15 January 2018 в 15:08

Не видя реального сценария, трудно понять, какие команды вы используете для файловых операций.


Один из очень простых вариантов может заключаться в том, чтобы просто создать временный файл после завершения действия копирования / перемещения, например,

#copy action

cp $1 /home/user/backup/
touch /tmp/finished.tmp

, а затем проверить, существует ли файл или есть недавние изменения с

ls -lha /tmp/finished

или для автоматической периодической проверки

watch ls -lha /tmp/finished

В зависимости от ваших потребностей вы можете назвать каждый временный файл как задание на копирование / перемещение, которое он представляет, возможно, все в тот же каталог

# set the variable JOBNAME via input or via sourcename
# JOBNAME=$SOURCE
# JOBNAME=$2
mkdir /tmp/copyjobs

# your copy job here

touch /tmp/copyjobs/finished.$JOBNAME.tmp

# your next copy job here 

touch /tmp/copyjobs/finished.$JOBNAME.tmp

Затем просмотрите весь каталог

watch ls -lha /tmp/copyjobs/

В зависимости от вашего навыка вы также можете использовать циклы и так далее.


Такие инструменты, как rsync , имеют встроенную индикатор выполнения для командной строки, поэтому вы можете видеть, как далеко продвигается ваша работа с - прогресс или -P .

Но rsync может быть не подходящим инструментом для работы.

0
ответ дан 15 January 2018 в 15:08

"gcp" - твой друг:)

Это то, что тебе нужно?

$ gcp -rf test.file tmp/
Copying 404.32 MiB 100% |############################| 471.12 MB/s Time: 0:00:00
0
ответ дан 15 January 2018 в 15:08

Предполагается, что вы используете cp, процесс может начать вторую

cp SOURCE TARGET 
ALERTCOMMAND

Нет предопределенной команды оповещения, но вы можете выдать все, что у вас есть и кажется подходящим, возможно, воспроизвести фрагмент аудио с аудио игрок для повышения осведомленности. В прежние времена, когда у людей были оптические дисководы, открывать их с помощью команды eject тоже было возможно. :)

cp SOURCE TARGET && FANFARE || REQUIEM 

Опять же, нет такой команды, как FANFARE или REQUIEM. В зависимости от успеха или неудачи вы можете вводить разные команды в одной строке. Будь креативным. На том же виртуальном рабочем столе всплывающая новая программа повышает осведомленность - см., Например, man zenity . Или используйте xmessage :

cp SOURCE TARGET && xmessage "Done"
0
ответ дан 15 January 2018 в 15:08

Проверьте исходный код для progress_bar в приведенном ниже хранилище git:

https://github.com/Kiran-Bose/supreme

Также попробуйте пакет пользовательских сценариев bash supreme

Загрузите файл deb из указанного выше репозитория и установите его в системах на основе Debian.

Обзор функций

(1) Открытые приложения ---- Firefox ---- Калькулятор ---- Настройки

(2) Управление файлами ---- Поиск --- -Навигация ---- Быстрый доступ

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3) Управление телефоном ---- Перемещение / копирование с телефона ---- Перемещение / копирование на телефон ---- Синхронизация папок

(4) Управление USB ---- перемещение / копирование с USB ---- перемещение / копирование на USB

0
ответ дан 15 January 2018 в 15:08

Другие вопросы по тегам:

Похожие вопросы: