Как переместить файлы, включая полный путь к подпапке? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть папка public, которая включает в себя .html и не .html файлы в своей корневой папке и подпапках.Мне нужно переместить все файлы, кроме .html, в подпапку папки public, например, в public/assets, сохранив их полный путь.

Пока что я получил что-то вроде этого:

mkdir -p public/assets
find public -type f -not -name "*.html" -print0 | xargs -0I{} mv {} public/assets/

Он не работает правильно, потому что он не перемещает файлы с полным путем, например, если есть файл public/foo/bar.js, он будет перемещен в public/assets/bar.js, а не в public/assets/foo/bar.js.

Я также попробовал другую версию:

mkdir -p public/assets
find public -type f -not -name "*.html" | sed 's#\(public\)\(.*\)#\1\2 public/assets\2#' | xargs -I% mv %

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

Было бы также здорово, если быспособ удалить пустые папки после перемещения всех файлов, но это не обязательно.

1 Ответ

1 голос
/ 31 марта 2019

Я предлагаю использовать для этого rsync.Кроме того, я бы использовал папку в другом месте в качестве места назначения.Затем эту папку можно скопировать обратно в общую папку.

mkdir /tmp/assets

rsync -r --include="*/" --exclude="*.html" --include="*" --prune-empty-dirs public/* /tmp/assets

mv /tmp/assets public/assets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...