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

Я изменил сценарий, чтобы зациклить файлы 4 на 4 - протестировано примерно на 20 файлах, похоже, что он работает. Сценарий сохранит имена файлов в массиве, а затем зациклит их 4 на 4:

    temp=$(mktemp)

    declare -a files=($(echo *.json|sort))
    length=$(echo ${#files[@]})

    for ((i=0;i<length;i++))
    do
      for ((j=0;j<=3;j++))
      do
        [ "${files[i]}" == "${files[i+j]}" ] && continue
        [ "$((i+j))" -ge "$length" ] && continue
        echo ${files[i]} ${files[i+j]}
        #grep -w -Ff ${files[i]} -v ${files[i+j]} > ${temp}
        #mv ${temp} ${files[i+j]}
      done
    done

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

2
22.01.2017, 21:16
1 ответ

Вы не использовали параметр -type , поэтому find удалит ( -delete ) все, что соответствует предоставленным условиям (здесь именно -mindepth 1 -mtime +5 ), будь то файл или каталог (если он пуст) или что-то еще.

Если вы хотите удалить только пустые каталоги:

find /path/to/directory/ -mindepth 1 -type d -mtime +5 -delete

Обратите внимание, что лучше взглянуть на файлы, которые нужно удалить, прежде чем выполнять удаление, отбросьте -delete :

find /path/to/directory/ -mindepth 1-type d -mtime +5

Для полноты картины, если вы хотите искать только файлы и каталоги, вставьте конструкцию OR в find :

find /path/to/directory/ -mindepth 1 \( -type f -o -type d \) -mtime +5 

Если вы хотите удалить и не пустые каталоги, используйте rm внутри действия -exec :

find /path/to/directory/ -mindepth 1 \( -type f -o -type d \) -mtime +5 -exec rm -r {} +

Добавьте -f с rm , если необходимо.

3
27.01.2020, 22:03

Теги

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