Удалить набор папок, содержащих более одного '-' в разных местах как часть их имени

Вот вам еще одно решение

cal | awk 'NR >= 3 { tu = substr($0,7,2) +0 } tu { print tu; exit }'
4

cal 3 2016 | awk 'NR >= 3 { tu = substr($0,7,2) +0 } tu { print tu; exit }'
1

Он выбирает столбец вторника (символы 7 и 8 )и выдает первое не-нулевое значение. Подход можно смело экстраполировать на любой день недели.

1
13.04.2020, 17:18
3 ответа

Узор

*-*-*/

соответствует каталогам с двумя или более дефисами. *соответствует любой строке (ноль или более символов ).

Если вы хотите сопоставлять только имена каталогов, которые не должны начинаться и заканчиваться дефисом (, как в вашем примере ), вы можете использовать

[!-]*-*-*[!-]/

вместо этого. [!-]соответствует любому символу, который не является(!)дефисом.

Выполнить

ls -d [!-]*-*-*[!-]/

сначала проверьте, не те ли это записи, которые вы хотите удалить. Затем запустите

rm -r [!-]*-*-*[!-]/

, чтобы удалить их рекурсивно. Если вам действительно необходимо принудительное удаление, добавьте в команду -f.

5
19.03.2021, 02:29
rm -r *-*-*-*-*

ВНИМАНИЕ :Будет удален каждый файл, соответствующий этой схеме. Таким образом, файлы типа:

system-file-separated-by-minus 

также будет удален.

Часть ' *' обозначает все (ноль, один или несколько символов )до следующего заданного, в данном случае разделенного минусом. Если вы знаете, что ваши файлы 8 символов перед -, 4 перед следующим можно сказать:

rm -r ????????-????-????-????-????????????

Каждый ? обозначает любой символ. Это удалит все файлы, соответствующие вашей схеме. Но также будут удалены файлы с такой же схемой, которые вы, возможно, не хотите, поэтому сначала проверьте это.

5
19.03.2021, 02:29

Просто выполните эту команду в родительском каталоге

rm -r *-*-*/
3
19.03.2021, 02:29

Теги

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