Не проверено:
zmv -Q '(*)/(*)(/)' '$1 - $2'
rmdir -- *(/^F)
Вторая строка удаляет все пустые каталоги, даже те, в которых раньше не было файла. Это можно обойти с помощью пользовательской оболочки mv
, которая записывает, из каких каталогов перемещаются объекты.
Обратите внимание, что при этом передаются символические ссылки на каталоги в текущем каталоге.
Не проверено.
rename / ' - ' */*/
rmdir -- */ 2>/dev/null
Обратите внимание, что при этом проходятся символические ссылки на каталоги в текущем каталоге и в его подкаталогах. Вторая строка удаляет все пустые каталоги, даже те, в которых раньше не было файла.
Не проверено.
prename 's~/~ - ~' */*/
rmdir -- */ 2>/dev/null
Обратите внимание, что при этом проходятся символические ссылки на каталоги в текущем каталоге и в его подкаталогах. Вторая строка удаляет все пустые каталоги, даже те, в которых раньше не было файла.
Вот более сложный подход, который удаляет только те каталоги, из которых он что-то переименовал. Опять же, не проверено.
prename 's~([^/]+)/~$1 - ~ and ++$d{$1}; END {map {rmdir} keys %d}' */*/
Для этого можно использовать Ansible . Это инструмент для автоматизации управления машинами, который может устанавливать/удалять пакеты.
У меня есть следующая схема для пакетов, которые я хочу установить на всех *моих машинах, чтобы они запускались после новой установки машины.
--- # Post install operating system
- hosts: most
remote_user: ansible
become: yes
become_method: sudo
connection: ssh
gather_facts: yes
tasks:
- name: "Install packages"
package:
name: "{{ item }}"
state: present
with_items:
- anki
- binutils
- clusterssh
- dmidecode
- etckeeper
- fortune-mod
- gcc
- gitk
- gpm
- hdparm
- htop
- inotify-tools
- kdiff3
- keychain
- kmplayer
- libreoffice
...
*Все машины, включенные в группу most
.