переименование всех файлов во всех подкаталогах

Удаление firewalld пакет решил проблему.

6
22.12.2014, 22:29
2 ответа

Этот одноклассник сделает это:

find path/ -name '*.jpg' -exec bash -c 'dn=$(dirname "$1"); bn=$(basename "$dn"); c=$(ls "$dn/$bn"_??.jpg 2>/dev/null | wc -l); c=$((c+1)); cnt=$(printf "%02d" $c); mv "$1" "$dn/${bn}"_$cnt.jpg' -- {} \;

с разбитой линией для более легкого чтения:

find path/ -name '*.jpg' -exec bash -c '\
  dn=$(dirname "$1"); bn=$(basename "$dn"); \
  c=$(ls "$dn/$bn"_??.jpg 2>/dev/null | wc -l); c=$((c+1)); \
  cnt=$(printf "%02d" $c); mv "$1" "$dn/${bn}"_$cnt.jpg' -- {} \;
2
27.01.2020, 20:30

Я бы порекомендовал итеративный подход к рекурсивному. Чтобы отсканировать (Sub) каталоги, используйте инструмент «Find» и его аргумент «-Type d».

Пример:

find parentdir -type d | while read d ; do
    a=1
    # For example, $d could be "parent/subdir"
    b="$(basename $d)"
    # For above example, $b would be "subdir"
    for i in "${d}/*.jpg" ; do
        new=$(printf "%04d" ${a})
        mv "${i}" "${d}/${b}_${new}.jpg"
        let a=a+1
    done
done

Я еще не проверил код, но он должен дать вам хорошую идею, как следует выглядеть. Потенциальные проблемы могут быть пробелами в имена файлов; Переопределение, если может помочь вам.

0
27.01.2020, 20:30

Теги

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