Неверная замена при переименовании файлов с помощью find

Проблема в том, что / home / * / mail / new / * расширяется до слишком большого количества имен файлов. Самое простое решение - вместо этого удалить каталог:

rm -rf /home/*/mail/new/

Или используйте команду find . Должно сработать, просто будет медленнее.

Или, если вам нужны новые каталоги, используйте цикл для их поиска, удаления и воссоздания:

for d in /home/*/mail/new/; do
    rm -rf "$d" && mkdir "$d"
done

Цикл, который вы пытались написать (но не используйте его, это очень медленно и неэффективно) выглядит примерно так:

for f in /home/*/mail/new/* /home/*/mail/new/.*; do
    rm -rf "$f"
done

Нет необходимости проверять файлы, если вы хотите удалить все, просто используйте rm -rf , и каталоги и файлы могут быть удалены одной и той же командой. Он будет жаловаться на невозможность удаления . и .. , но вы можете игнорировать это. Или, если вы хотите быть очень чистым и избежать ошибок, вы можете сделать это в bash:

shopt -s dotglob
for f in /home/*/mail/new/*; do
        rm -rf "$f"
done
1
07.12.2015, 00:06
0 ответов

Теги

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