Поменять местами каталоги в дереве с / dir1 / dir2 / dir3 / dir4 на / dir1 / dir2 / dir4 / dir3

Если поля разделены одним пробелом, а не любой последовательностью пустых символов, то if

1 2  4 5 6 7

- это строка с 7-м полем, но без третьего поля:

awk -F '[ ]' '$7 != ""' < file > final_output

[] - регулярное выражение что соответствует пробелу. Мы не используем -F '' как одиночный пробел, поскольку разделитель полей имеет особое значение (дает поведение разделения полей по умолчанию, когда любая последовательность из одного или нескольких пустых символов действует как один разделитель и начальные и конечные пробелы игнорируются).

3
19.01.2017, 20:33
1 ответ

Учитывая ваш пример выше, если вы можете быть уверены, что всегда есть 6 каталогов, вы можете поменять местами два последних, сделав что-то вроде этого:

find stats -mindepth 5 -maxdepth 5 -type d \    # (Or some other way of generating your list of directories)
| while read dir
do
     mv -v "$dir" "$(echo $dir | awk -F '/' '{ print $1"/"$2"/"$3"/"$4"/"$6"/"$5 }')"
done

Бросьте echo перед mv, чтобы сначала проверить это.

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

0
27.01.2020, 21:37

Теги

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