Переместить файлы во вложенных каталогах в папку dest, но сохранить основное имя и отказаться от структуры папок?

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

Фактическая проблема заключалась в том, что вы использовали $ F , а не % F . Первая была бы пустой переменной, и поэтому команда date не имела бы вывода. Итак, вот модифицированная команда:

for i in ./*; do
    modTime="$(/usr/gnu/bin/date -r "$i" +%F)"
    echo "$modTime"
done

Однако одна команда find должна делать то, что вы хотите:

find ./ -maxdepth 1 -printf "%TY-%Tm-%Td\n"
3
02.07.2016, 15:24
1 ответ

Вместо того, чтобы возиться с find + xargs + mv , просто переключитесь на zsh и выполните

autoload -U zmv
zmv -n '$(MY_DIR)/source/**/(*).wav3' '$(MY_DIR)/source/${1%%.*}.wav'

Как это работает:

  • сначала мы загружаем zmv через autoload
  • -n параметр, чтобы предотвратить выполнение, просто посмотрите, что он будет делать, и, если вас устраивает вывод, удалите этот параметр
  • двойная звездочка ** соответствует всем вложенным каталогам
  • (*) соответствует чему угодно и сохраняет результат в $ 1 переменной
  • $ {1 %%. * } удалите первую точку из всех последующих символов
  • и, наконец, добавьте .wav extension
1
27.01.2020, 21:30

Теги

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