Это потому, что df показывает информацию только о смонтированных файловых системах. sda1 и sda3 смонтированы, поэтому они показывают правильную информацию.
ls | egrep '^m' | awk '{ x=$0; gsub(/^./, ""); $0 = x " " $0 }1' | xargs -l -t mv
Posix- ly реализация осуществляется через параметр -L
для xargs
как:
ls | egrep '^m' | awk '{ x=$0; gsub(/^./, ""); $0 = x " " $0 }1' | xargs -L 1 -t mv
ls | egrep '^m' | awk '{ x=$0; gsub(/^./, ""); print x, $0 }' | xargs -L 1 -t mv
На основе what Я ответил на ваш предыдущий запрос относительно xargs
, мы можем использовать это обучение с пользой в этом примере.
Я немного изменил ваш код awk
: он сохраняет исходную строку ( $ 0
), так как функция gsub
затирает ее.Затем мы соединяем старую и новую, чтобы получить строку, которую мы хотим отправить в xargs
, который затем вызовет mv
с правильными аргументами для выполнения переименования.
Это должно обрабатывать всю операцию:
for file in m*; do mv "${file}" "${file#m}"; done
Перед тем, как запустить это, сначала проверьте все с помощью
for file in m*; do echo mv "${file}" "${file#m}"; done
Это использует глобус m *
для шагов 1 и 2, затем $ {file # m}
(который удаляет «m» из начала $ {file}
) для шага 3 и, наконец, цикл для шага 4.
Чтобы ответьте на свой вопрос AWK, вы можете сделать это следующим образом:
echo mfoo | awk '{ print $0, substr($0, 2) }'
Переменные AWK не используют $
, это только для полей; вот откуда взялась ваша ошибка: AWK понимает $ old
как «значение поля, пронумерованное в соответствии со значением old
». Его тоже будет легче читать, если вы поместите свои команды в один блок (при условии, что они имеют один и тот же шаблон). Исправление вашего скрипта дает
echo mfoo | awk '{ old = $0; gsub(/^./, ""); print old, $0 }'
Лучшая стратегия - использовать команду переименовать
.
Обратите внимание, что точный синтаксис этих команд зависит от дистрибутива, обратитесь к странице man
вашей конкретной версии дистрибутива. В Ubuntu, например, в которой есть Perl-реализация переименовать
, вы можете использовать регулярное выражение:
rename -nono 's/^m//' m*
Примечание: удалите флаг -nono
, чтобы фактически выполнить переименование.