Я хотел бы знать, возможно ли переместить все подкаталоги и их содержание в рамках моего рабочего каталога в рабочий каталог, так, чтобы подкаталоги стали основными каталогами в дереве.
например:
Я нахожусь в workingdir
, внутри мы имеем folder1
, folder2
, folder3
, и т.д.
теперь папка 1, 2, и 3 уже является основными каталогами в рамках рабочего каталога, но когда мы добираемся до folder4
существует подкаталог, в котором имеет то же имя folder4
затем содержание и это продолжаются folder5
, folder6
на folder100andsomething
.
То, что я хотел бы, должно выполнить команду для перемещения подкаталогов folder4
полностью к folder100andsomething
наряду с их содержанием из родительских каталогов, и в рабочий каталог, таким образом, в конце я имел бы folder1
- folder100andsomething
как основные каталоги и набор ошибочных пустых родителей. Для чистки я могу выполнить команду для удаления всех пустых родительских каталогов.
С find
и rename
:
$ find . -mindepth 3 | rename -n 's:([^/]+)/\1:$1:'
./folder10/folder10/blah10 -> ./folder10/blah10
./folder9/folder9/blah9 -> ./folder9/blah9
./folder8/folder8/blah8 -> ./folder8/blah8
./folder7/folder7/blah7 -> ./folder7/blah7
./folder6/folder6/blah6 -> ./folder6/blah6
./folder5/folder5/blah5 -> ./folder5/blah5
./folder4/folder4/blah4 -> ./folder4/blah4
regex ([^/]+)/\1
соответствует тексту, который повторяется и имеет /
промежуточный (так, folder4/folder4
, и т.д.). Замена является просто частью, которая была повторена (так, всего folder4
).
-n
опция только показывает то, какие изменения будут внесены. Если изменения выглядят хорошо, то выполненными без него для фактического выполнения изменений.