Для этого можно использовать комбинацию awk
и xargs
,
sort -r directories | awk -F/ 'cache[$3, $4, $6]++' | xargs -L1 rm -rf
каталогов
это просто файл, содержащий все ваши каталоги, sort -r каталоги
могут быть легко заменены конвейером (например, printf "% s \ n" / home / * / * / Content / * / * | сортировка -r
).
sort -r
помещает каталоги в начало списка (он использует тот факт, что ваши даты можно сравнивать лексикографически, если бы их не было, вам бы сначала пришлось их правильно проанализировать) . Наконец, awk
ведет учет, когда он впервые видит ( пользователь
, среда
, продукт
), он не печатает его, печатаются все следующие вхождения. Это создает список каталогов для удаления, который затем удаляется с помощью xargs
/ rm
.
Примечание: если ваши имена файлов / каталогов содержат пробелы или «странные» символы, это не совсем сработает, поэтому вам придется изменить команду.
Что делает awk -F / 'cache [$ 3, $ 4, $ 6] ++'
? Сначала он разбивает входные строки на /
. Затем для каждой входной строки он проверяет, присутствует ли кортеж, содержащий 3-е, 4-е и 6-е значения, в ассоциативном массиве cache
.В первый раз, когда кортеж виден не в массиве, поэтому cache [$ 3, $ 4, $ 6]
возвращает 0
, поэтому строка удаляется, ++
затем устанавливает cache [$ 3, $ 4, $ 6]
на 1
. В следующий раз, когда будет виден кортеж cache [$ 3, $ 4, $ 6]
вернет что-то > 0
, что означает, что строка будет напечатана.
Вот простой рабочий пример:
$ cat example
a,c,0
a,a,2
c,a,0
a,b,2
b,a,2
a,b,0
c,a,1
b,b,0
a,b,1
a,a,1
a,a,0
b,a,1
b,c,2
b,b,2
b,c,1
a,c,1
c,c,1
$ awk -F, 'cache[$1, $2]++' example
a,b,0
c,a,1
a,b,1
a,a,1
a,a,0
b,a,1
b,b,2
b,c,1
a,c,1
$ fgrep a,b example
a,b,2
a,b,0
a,b,1
$
Обратите внимание, как строка a, b, 2
пропала, а a, b, 0
и a, b, 1
- нет. Использование ассоциативного массива и оператора ++
является довольно распространенным шаблоном в awk
, например, см. 43. Удалите повторяющиеся непоследовательные строки .
Если вы использовали su
для переключения на root, переменная среды XAUTHORITY
доступна в корневой оболочке, запущенной с помощью su
. А поскольку root может читать ваши файлы, он имеет доступ к файлу Xauthority. В моей системе:
root@host# medit
запускается нормально, тогда как опустошение XAUTHORITY
приводит к сбою:
root@host# XAUTHORITY= medit
No protocol specified
(medit:25388): Gtk-WARNING **: 12:35:31.963: cannot open display: :1