Сценарий Bash для удаления файла под названием index.html рекурсивно

Вы могли попытаться использовать Raspberry Pi (http://www.raspberrypi.org/)

Это только имеет один порт Ethernet, но по половине Вашей указанной цены, Вы могли купить 2 для получения двойного порта Ethernet, эффективно удвоив питание системы.

3
05.05.2014, 21:46
3 ответа

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

Шаг 1: редактирование crontab

crontab -e

Шаг 2: добавьте в следующей строке (это выполнит ее ежедневно в 4:30, изменится на Вашу симпатию):

30 4 * * * find /path/to/directory -name "index.html" -delete

Шаг 3: Сохраните и выйдите.

9
27.01.2020, 21:09
  • 1
    +1, но Вам не нужны кавычки там –  Zelda 17.01.2014, 11:49
  • 2
    @paulburkeland @zelda Так синтаксис был бы * * * * * find /path/to/directory -name index.html -delete? Это было бы рекурсивно? –  Ali Samii 17.01.2014, 14:06
  • 3
    @alisamii да, find является всегда рекурсивным. –  terdon♦ 17.01.2014, 14:17
  • 4
    @terdon, между чем различие * * * * * find /path/to/directory -name index.html -delete и * * * * * find /path/to/directory -name index.html -exec rm -f {} + –  Ali Samii 17.01.2014, 14:20
  • 5
    @Zelda интересно если это правда. Так как OP использует -exec command + (отметьте +), это вызовет find объединить имена файлов в как можно меньше команд в то время как -delete будет звонить unlinkat() однажды для каждого файла. Я нисколько не уверен, который будет быстрее. В любом случае, aslisamii, это детали, и Вы действительно не заботитесь. Используйте, какой бы ни Вы предпочитаете, просто помните это -delete не доступно на всех find реализации. –  terdon♦ 17.01.2014, 14:48

Поскольку Вы упомянули, что относительные пути предполагают, что, например, Вы хотите очистить дерево, расположенное в /path/to/directory. Затем следующие отрывки все достигнут того же. Первый использует аргумент полного пути в пользу find, оставление три относительное (относительно того, измененного на с предыдущим cd)

#!/bin/bash
find /path/to/directory -name "index.html" -print0 | xargs -0 rm -rf  
#!/bin/bash
cd /path || exit
find to/directory -name "index.html" -print0 | xargs -0 rm -rf  
#!/bin/bash
cd /path/to || exit
find directory -name "index.html" -print0 | xargs -0 rm -rf  
#!/bin/bash
cd /path/to/directory || exit
find . -name "index.html" -print0 | xargs -0 rm -rf  

И voilà?

Запаздывание / не важно для find команда, если /path/to/directory символьная ссылка, или Вы хотите получить ошибку если /path/to/directory не каталог.

Необходимо будет установить файл как исполняемый файл.

Вы просто ответили на свой собственный вопрос :D

1
27.01.2020, 21:09
  • 1
    Так, все, что необходимо для записи файла сценария, должно запустить файл с #!/bin/bash на его собственной строке? Это было просто. –  Ali Samii 17.01.2014, 11:14
  • 2
    @alisamii это может быть bash или sh или ksh это зависит, на котором Вам нравится большинство, но для простого сценария как этот удар в порядке –  Kiwy 17.01.2014, 11:16
  • 3
    в отношении первой команды CD, объясните одну вещь. Если я надеюсь удалять index.html в следующем пути /home/user/site/client/conf/repo/section и во всех подкаталогах такой как /home/user/site/client/conf/repo/section/dir1 и /home/user/site/client/conf/repo/section/dir2 что я вставил бы как путь для cd команда и что я поместил бы как путь для find команда. Я хочу удостовериться, что это только удаляет названные файлы index.html и только те, которые являются в корне /home/user/site/client/conf/repo/section и его подкаталоги. –  Ali Samii 17.01.2014, 11:22
  • 4
    Кроме того, был бы это быть лучше установить путь относительно дома/корня пользователя, т.е. ~/site/client/conf/repo/section или относительно корня сервера, который является /home/user/site/client/conf/repo/section? –  Ali Samii 17.01.2014, 11:25
  • 5
    ~/site/client/conf/repo/section полный путь –  Kiwy 17.01.2014, 11:33

Простой, быстрый и портативный путь состоит в том, чтобы использовать:

find /path/to/directory -name index.html -exec rm -f {} +

-print0, -delete и xargs -0 расширения GNU.

1
27.01.2020, 21:09
  • 1
    , как Вы имеете rm -f Я предполагаю, что это не рекурсивное, удаляют. Я предполагаю, что должен был бы изменить его к rm -rf сделать это рекурсивным, правильно? –  Ali Samii 17.01.2014, 14:12
  • 2
    find команда является рекурсивной. Если Вам не назвали каталоги index.html, -r было бы бесполезно. –  jlliagre 17.01.2014, 14:14
  • 3
    Так, если я хочу добавить его к crontab, таким образом, что это работает каждую минуту, с помощью crontab -e, строка, которую я добавил бы, будет * * * * * find /path/to/directory -name index.html -exec rm -f {} + –  Ali Samii 17.01.2014, 14:18
  • 4
    Это было бы достаточно действительно. –  jlliagre 17.01.2014, 14:21

Теги

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