Как удалить папку, но оставить только выбранные файлы?

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

for filename in $(ls "$1" | grep -v '\.old$')

Если ваш учитель чрезвычайно глуп, непросветлен, они могут предпочесть, чтобы вы опустили кавычки \и $. Пожалуйста, познакомьте своего учителя с Unix & Linux Stack Exchange . Но если ваш учитель не может или не хочет научиться делать что-то правильно, затем делать домашнее задание так, как они хотят.

Тогда немедленно забудь об этом, потому что оно ошибочно.


Вот вариант ответа Кусалананды это может быть немного легче читать. (Я добавил проверку ошибок, потому что это правильно ™.)

if [ "$1" = "" ]
then
    printf 'Usage:  %s \n' "$0"
    exit 1
fi
if [ ! -d "$1" ]
then
    printf 'Error: %s is not a directory.\n' "$1"
    exit 2
fi
for filename in "$1"/*
do
    case "$filename" in
       (*.old)                  # Skip
        ;;
       (*)
        mv -- "$filename" "$filename.old"
    esac
done

Вы также можете

  • обрабатывает случай, когда $1является каталогом, но либо
    • у вас нет на это полного разрешения или
    • пусто.
  • спросите, должны ли вы переименовывать каталоги, символические ссылки и многое другое.

0
31.03.2020, 05:41
1 ответ

Из вашей структуры в ожидаемом результате вы просто хотите сохранить файлы, которые не заканчиваются на .json. Это сделает:

cd Photos
find. -type f ! -name *.json -exec mv {}. \; && rm -rf 2015*

Внутри каталога Photos вы найдете файлы, которые не заканчиваются на .json, переместите их в .или текущий каталог, а затем удалите подкаталоги и файлы внутри, которые вам не нужны.. Вы также можете использовать rm -ri 2015*, чтобы он запрашивал вас перед удалением каждого каталога, или запускать команды findи rmотдельно на случай, если вы передумаете перед удалением остальных файлов и их каталогов.

3
19.03.2021, 02:31

Теги

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