Скрипт .sh для поиска и удаления папок с переменным именем

Если вы хотите переместить все файлы и каталоги со скрытыми именами (, начинающимися с точки ), в другое место:

mv.[^.]* old-dot-files/

Или всякий раз, когда вы хотите что-то сделать со всеми точечными -файлами или точечными -каталогами в каталоге:

for name in.[^.]*; do
   # process "$name"
done

Обратите внимание, что шаблон .??*требует, чтобы совпадающие имена содержали не менее трех символов, поэтому имена, подобные .a, не будут выбраны. .[^.]*, с другой стороны, пропустит все, что содержит двойную точку в начале имени.

Возможно, будет лучше явно проверить совпадающие имена:

for name in.*; do
    # expecting a regular file
    if [ -f "$name" ]; then
        # process "$name"
    fi
done

for name in.*; do
    # expecting a directory other than. and..
    if [ -d "$name" ] && [ "$name" != '.' ] && [ "$name != '..' ]; then
        # process "$name"
    fi
done

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

0
05.09.2019, 16:18
1 ответ

Если вы уверены, что больше ничего не будет иметь ".sb -" в имени файла, вы можете автоматически удалить их с помощью чего-то вроде этого:

find. -type d -name '*.sb-*' -prune -exec rm -rf {} \; 

Это найдет все файлы из каталога, в котором он запущен, измените find.на начальный каталог, в котором вы хотите запустить это(find <start dir>). Для всех файлов, которые он находит с «.sb -» в имени файла, find удалит файл с rm.

1
28.01.2020, 02:39

Теги

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