Как переместить все файлы с определенным расширением файла от подкаталогов до единственного каталога

Как насчет использования определяют, чтобы найти размер Вашего изображения и решить из маленького сценария, если Вы хотите отредактировать его или нет:

identify -format "width=%w heigth=%h" bootchart.png 
width=3853 heigth=10092

Не должно быть слишком твердым для редактирования выходного формата для использования в простом сценарии.

5
13.05.2013, 01:03
3 ответа

В zsh можно использовать рекурсивный шарик:

mkdir ~/epubs
mv -- **/*.epub ~/epubs/

В ударе ≥4, выполненный shopt -s globstar (можно вставить это Ваш ~/.bashrc) затем команда выше. В ksh, выполненном set -o globstar сначала.

Только с инструментами POSIX, выполненными find:

find . -name '*.epub' -exec mv {} ~/epubs \;
11
27.01.2020, 20:32
  • 1
    Отметьте это bashfish) вопреки zsh или ksh93 действительно следуют за символьными ссылками при убывании дерева каталогов (см. здесь для деталей). find будет включать точечные файлы и следовать за dotdirs, нет **. С **, можно столкнуться со слишком многими пределами args который zsh и ksh93 имейте работу вокруг для, но нет bash. –  Stéphane Chazelas 07.05.2013, 08:42

Попытайтесь делать это:

mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;

если все файлы называют name.epub, затем необходимо увеличить переменную как это (использующий )

mkdir ../new_dir
find . -type f -name '*.epub' |
    while read a; do
        ((c++))
        base="${a##*/}"
        mv "$a" "../new_dir/${base%.epub}_$(printf %.03d $c).epub"
    done
4
27.01.2020, 20:32
  • 1
    Это собирается закончиться с большим количеством сообщений об ошибках, если целевой каталог является частью дерева поиска... Таким образом, если Вы хотите создать его там, прежде всего, затем используют -prune по крайней мере. –  Hauke Laging 07.05.2013, 01:13
  • 2
    , отредактированное соответственно –  Gilles Quenot 07.05.2013, 12:00

Используя удар в соответствии с Linux:

shopt -s nullglob globstar
mv -t ~/epub_directory ~/big_dir/**/*.epub
3
27.01.2020, 20:32
  • 1
    Обратите внимание, что нет ничего определенного для Linux там. mv -t GNU, конкретный хотя (и большинство дистрибутивов Linux имеют GNU mv как их mv). Нет никакой причины использовать mv -t здесь все же. –  Stéphane Chazelas 07.05.2013, 08:54
  • 2
    @StephaneChazelas я добавил это. На практике, для большинства людей, GNU <-> Linux || Cygwin (в противоположность OSX, *BSD, Солярис). Я не видел точку использования mv -t любой, но не чувствовал себя комфортно, изменяя это (это - вопрос стиля, а не правильности). –  Gilles 'SO- stop being evil' 07.05.2013, 11:07
  • 3
    я первоначально, имело что-то немного более сложная передача по каналу в к xargs mv -t dir. Я оставил ту форму mv здесь –  glenn jackman 07.05.2013, 13:59

Теги

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