Если бы в параллельном перемещении файлов были какие-то достоинства, велика вероятность, что mv
уже делал бы это самостоятельно, либо существовал бы аналогичный инструмент. ;)
Нет смысла запускать mv
параллельно на одном и том же исходном / целевом диске, поскольку обычно скорость носителя в любом случае ограничена. Если / usb_storage /
- это USB-накопитель, это не заставит его работать быстрее.
mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/
Должен быть лучшим методом, поскольку он делает то, что вы хотите, блокирует до завершения (чтобы ваша альтернатива была примерно эквивалентной, вам нужно добавить wait
в конце). Последовательная запись файлов вместо параллельной также помогает предотвратить ненужную фрагментацию файлов.
Кроме того, в случае, если / usb_storage /
недостаточно велик для хранения всех файлов, на которые вы перемещаетесь, вместо трех неполных / без копий при параллельной работе вы можете получить хотя бы один полный файл с последовательным решением.
Как далеко это заведет вас?:
awk -vRS="]" '/rootVolume:false/ {for (i=1; i<=NF; i++) if ($i ~ /name|deviceName/) print $i}' file
name:/var/log/devops|40GB;/home/devops|150GB,
deviceName:/dev/sdb,
Он разбивает единственную строку в ]
, затем сканирует все поля, чтобы найти целевые, и распечатывает их. Вы можете прочитать результат в переменных оболочки следующим образом, затем:
read VARA VARB REST <<< $(awk -vRS="],*" -vORS=" " '/rootVolume:false/ {for (i=1; i<=NF; i++) if ($i ~ /name|deviceName/) print $i}' file)
echo $VARA
name:/var/log/devops|40GB;/home/devops|150GB,
echo $VARB
deviceName:/dev/sdb,
Вы можете использовать команду cut
что-то вроде:
cat /tmp/volume.log | cut -d, -f14 | tr -d "]["
rootVolume=false
make it a variable:
rootvolume=$(cat /tmp/volume.log | cut -d, -f14 | tr -d "][")
cat /tmp/volume.log | cut -d, -f3
deviceName:/dev/sda
cat /tmp/volume.log | cut -d, -f9
name:/var/log/devops|40GB;/home/devops|150GB
Или сgrep
cat /tmp/volume.log | grep -o "rootVolume:false]]," | tr "][,"
make it a variable:
rootvolume=$(cat /tmp/volume.log | grep -o "rootVolume:false]]," | tr "][,")
cat /tmp/volume.log | grep -o "deviceName:/dev/sda"
cat /tmp/volume.log | grep -o "name:/var/log/devops|40GB;/home/devops|150GB" | tr -d "\n"
-о,--только -соответствие Печатать только совпадающие (не -пустые )части совпадающей строки, причем каждая такая часть находится в отдельной строке вывода.
Используйте tr
после grep
, чтобы удалить [],....etc
из вашего вывода.