Как указывает sebas ,usbtopкажется, дает определенный минимальный уровень полезной информации (, хотя мог бы быть намного лучше ), поэтому я рекомендую его.
Клонировать репозиторий git:
git clone https://github.com/aguinet/usbtop.git
Перейдите в каталог, который только что был создан изgit clone
:
cd usbtop
Установить зависимости:
sudo apt update
sudo apt install libboost-dev libpcap-dev libboost-thread-dev libboost-system-dev cmake
Создайте локальный каталог сборки и перейдите в него:
mkdir _build && cd _build
Запустите cmake, чтобы подготовиться к сборке usbtop из исходников:
cmake -DCMAKE_BUILD_TYPE=Release..
Собрать usbtop из исходников:
make
Установить usbtop:
sudo make install
Загрузите модуль ядра usbmon, чтобы открыть доступ к шинам USB (Я думаю, что это то, что нужно, но я знаю, что это необходимо):
sudo modprobe usbmon
Запустите usbtop (, если это не работает, используйте вместо этого sudo usbtop
):
usbtop
Если я что-то пропустил, дайте мне знать в комментариях.
iostat
вместо:sudo apt install sysstat
Запуск с интервалом в 1 -секунду с:
iostat -d 1
ИЛИ с интервалом 0,1 -секунды с:
watch -n 0.1 iostat
Пример выводаiostat -d 1
:
https://askubuntu.com/questions/3561/how-do-i-monitor-disk-activity-on-a-specific-drive
https://www.znetlive.com/blog/monitor-disk-io-windows-linux/
Нижняя структура:
├── destdir
└── srcdir
├── dir1
│ └── with space.csv
├── dir2
│ └── infile.csv
└── dir3
└── otherfile.Csv
запуск команды:
find "/path/to/srcdir" -type f -iname '*.csv' -exec sh -c '
path="${1%/*}"; filename="${1##*/}";
echo cp -nv "${1}" "/path/to/destdir/${path##*/}.${filename}" ' sh_cp {} \;
выдает следующий вывод (работает в сухом режиме):
cp -v /path/to/srcdir/dir2/infile.csv /path/to/destdir/dir2.infile.csv
cp -v /path/to/srcdir/dir1/with space.csv /path/to/destdir/dir1.file with space.csv
cp -v /path/to/srcdir/dir3/otherfile.Csv /path/to/destdir/dir3.otherfile.Csv
если мы удалим echo
перед командой cp
(, которая используется для пробного -запуска ), чтобы получить эффект копирования и переименования,вы получите структуру ниже:
├── destdir
│ ├── dir1.with space.csv
│ ├── dir2.infile.csv
│ └── dir3.otherfile.Csv
└── srcdir
├── dir1
│ └── with space.csv
├── dir2
│ └── infile.csv
└── dir3
└── otherfile.Csv
обратите внимание, что если в подкаталогах -было одно и то же имя файла и одно и то же имя родительского каталога, он будет перезаписан последним файлом, найденным командой find
, поэтому я использовал -n
для cp
чтобы предотвратить это, поэтому он не будет копировать тот же файл, обратите внимание на это.
Пояснение:
find "/path/to/srcdir" -type f -iname '*.csv' -exec sh -c '...' sh_cp {} \;
найти файлы с суффиксом .csv
(игнорировать -case )рекурсивно и -exec
использовать встроенный-sh
-скрипт для каждого sh -c '...'
мы назовем его sh_cp
; {}
- это замена пути к файлу , который находит команда find, и мы переходим к нашему сценарию, доступному по параметру $1
или ${1}
.
${1%/*}
:вырезает кратчайший -суффикс из ${1}
параметра (известный оболочка -параметр -расширение ), как указано выше ${1}
— это путь к файлу и при этом мы удаляем имя файла + последний /
из пути к файлу и оставляем только путь и сохраняем в переменной path
.
${1} --> /path/to/srcdir/dir2/infile.csv
${1%/*} --> /path/to/srcdir/dir2
${1##*/}
:вырезает самый длинный префикс -из параметра ${1}
; при этом мы удаляем путь из пути к файлу и оставляем только имя файла и сохраняем в переменной filename
.
${1} --> /path/to/srcdir/dir2/infile.csv
${1##*/} --> infile.csv
и соответственно:
path --> /path/to/srcdir/dir2
${path##*/} --> dir2
${filename} --> infile.csv
${path##*/}.${filename} --> dir2.infile.csv
подсказки:
xYz='to-test/path/to/srcdir/dir2/infile.csv'
${xYz%/*} --> to-test/path/to/srcdir/dir2
${xYz%%/*} --> to-test
${xYz#*/} --> path/to/srcdir/dir2/infile.csv
${xYz#*/} --> infile.csv