Удалить фотографии из каталога «Мои фотографии»

Если вы используете ls -lR , вам нужно каким-то образом исключить содержимое из вывода, а затем grep вывести то, что вы хотите.

find , вероятно, быстрее. Вот очень быстрый способ взлома моей машины ( grep уродливы, я ими не горжусь).

tony@trinity:~$ time ls -lR | grep "tony tony" | grep -vc "rwxr-xr-x"
115668

real    0m3.247s
user    0m1.456s
sys     0m1.808s
tony@trinity:~$ time find ./ -not -perm 755 | wc -l
125185

real    0m0.503s
user    0m0.120s
sys     0m0.380s
tony@trinity:~$ time ls -lR | grep "tony tony" | grep -vc "rwxr-xr-x"
115668

real    0m3.128s
user    0m1.564s
sys     0m1.920s
tony@trinity:~$ time find ./ -not -perm 755 | wc -l
125185

real    0m0.501s
user    0m0.196s
sys     0m0.428s

Некоторые примечания:

  • Я дважды выполнил обе команды, чтобы исключить вероятность отличия от кеширования.
  • Вы заметите, что они возвращают разные подсчеты, мой быстрый взлом grep недостаточно хорош, чтобы изолировать только соответствующие файлы и записи каталога.
  • Смысл этого не в том, чтобы показать вам лучшее решение, а в том, чтобы показать, что find работает довольно быстро по сравнению с raw ls + grep .

Могут быть более быстрые решения, например что-то в perl , или способ заставить ls работать быстрее (установка $ LANG ? - мои тесты просто показано, что это сбивает на секунду вывод ls , вы, вероятно, можете указать ls не сортировать, что может помочь).

Изменить: я только что видел ваш комментарий, в котором вы также говорите, что вам нужно изменить права доступа. В этом случае find является абсолютно правильным ответом, потому что он может выполнить всю работу за один раз.

find ./ -not -perm 755 -exec chmod 755 {} \;

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

find / actual / full / path -not -perm 755 -exec chmod 755 {} \;

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

Кроме того, вам, вероятно, следует рассмотреть программные ссылки, каталоги и нестандартные файлы и в результате изменить свой find . Итак, предполагая, что вас интересуют только файлы, я бы начал с

find / actual / full / path -type f -not -perm 755 -exec chmod 755 {} \;

Наконец, вы можете спросить вы сами, если вы меняете разрешения для каждого файла в каталоге или наборе каталогов, у которых нет разрешений с 755 по 755, тогда вам не нужно делать ничего сложного.

find / actual / full / path -type f -exec chmod 755 {} \;

Это просто установит их все на 755. Это может быть немного быстрее (меньше логики в выборе файлов для обновления vs .обновление разрешений на миллионы файлов зависит, я полагаю, от количества файлов, которые уже верны).

0
16.07.2016, 15:09
2 ответа

Если вы действительно хотите, чтобы это произошло после того, как пользователь войдет в систему, вы можете поместить его в свой файл профиля оболочки. Скорее всего ~ / .bash_profile .

Вы хотите добавить строку, вероятно, ближе к концу, которая просто вызывает имя файла вашего приложения, как если бы вы запускали его со своего терминала, например: /home/username/bin/mypersonalscript.sh& . Возможно, вам потребуется использовать абсолютный путь.

Также не забудьте добавить амперсанд в конец. Это переводит процесс в фоновый режим, и без него вы не сможете войти в свою оболочку при входе в систему.

Если это не сработает, убедитесь, что ваш скрипт исполняется.

1
29.04.2021, 00:12

Задача ядра - запустить один процесс: init , который получает идентификатор процесса 1. Это задача init - запускать другие процессы для предоставления системных служб и разрешения пользователям входить в систему.

Там - это еще несколько случаев, когда ядро ​​Linux выполняет процесс. Например, когда ядро ​​обнаруживает новое оборудование на определенных шинах, оно выполняет modprobe для загрузки драйвера как модуля . Другой пример: можно настроить программу для передачи дампов ядра. Я думаю, что во всех этих случаях используются функции call_usermodehelper_xxx .

Вы заметите, что случаев очень мало, и все они запускаются событием ядра: аппаратным событием или завершением программы. Это исключительные случаи, зарезервированные для низкоуровневой системной функциональности. Обычный способ выполнения процесса - это его разветвление из процесса, разветвленного из процесса, который ... разветвляется из init.

Ядро даже не знает об «успешном входе в систему». Вход в систему - это высокоуровневая концепция, стоящая далеко за пределами ядра. Чтобы запустить процесс от имени пользователя root, когда пользователь входит в систему, добавьте его в конфигурацию PAM с помощью модуля pam_exec . Чтобы запустить процесс от имени пользователя, который вошел в систему, добавьте его в файл запуска оболочки пользователя, обычно ~ / .profile .

1
29.04.2021, 00:12

Теги

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