Перемещение всех файлов определенного типа или расширения

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

2
задан 8 August 2014 в 23:58

4 ответа

Я не действительно уверен , Вы хотите переместить много файлов из многих каталогов, но вот основная команда для нахождения файлов нескольких расширений в одной структуре каталогов:

find /path/to/look/ -type f \( -iname \*.mp3 -o -iname \*.avi -o -iname \*.mp4 \)

Вы, очевидно, захотите прикрепить больше -o -iname ... на это, пока Вы не будете уверены, что находите все файлы, которые Вы хотите. Когда у Вас будет все, просто добавьте это до конца:

-exec mv -t /path/to/destination {} +

И это переместит их всех в указанный каталог.

<час>

А Bashier способ сделать это использовал бы несколько globbing модификаторов ( globstar к рекурсивному поиску с **, nullglob, чтобы только возвратить правильные файлы и nocaseglob для игнорирования регистра) и затем просто выдал бы их к mv в простом for цикл:

shopt -s globstar nullglob nocaseglob
for f in /path/to/look/{**/,}*.{mp3,avi,mp4}; do
  mv "$f" /path/to/destination/
done
2
ответ дан 7 October 2019 в 09:35

Я попробовал бы что-то как..

for files in $(find / | grep -P "([.]mp3$)|([.]avi$)")
do
cp $files /media/<your_external_drive>/target_folder/
done

необходимо добавить каждое расширение, которое Вы хотите искать в regex, если Вы хотите сделать все это в одном выстреле.

Или если Вы просто хотите переместить каталоги, Вы могли бы использовать,

cp -r /target/dir/on/machine /target/dir/on/external/drive

для каждого каталога, содержащего Ваши медиа-файлы.

1
ответ дан 7 October 2019 в 09:35

Я настоятельно рекомендую программу FreeFileSync . Это является большим для того, чтобы не только синхронизировать два каталога, но также и для задачи Вы имеете в виду. Можно добавить фильтры, чтобы включать или исключить шаблоны. Сначала Вы просто просматриваете к источнику слева и месту назначения справа. Тогда щелчок выдерживает сравнение для поиска всех файлов. Наконец нажмите на красную трубу наверху для редактирования фильтров.

Для фильтров, Вы помещаете каждый шаблон в новую строку. Можно заменить * в, включает раздел с чем-то как следующее, и отпуск исключает нетронутый раздел. Следующее переместится только mp3, avi, и jpg файлы:

*.mp3
*.avi
*.jpg

Или, если Вы уезжаете * в, включает раздел, можно сказать, какие файлы Вы не хотите перемещать. Следующее, добавленное к, исключает раздел, переместит все кроме txt, odt, и файлов PDF:

*.txt
*.odt
*.pdf

, Как только Вы вносите свои изменения и закрываете диалоговое окно фильтра, файлы, которые не будут перемещенными, отобразятся серым. Кнопки в нижней части рядом с "Избранным Представлением": позвольте Вам изменять, какие файлы отображены (эти кнопки не влияют на то, какие файлы будут перемещенными). Отображение только "Ничего не делает" файлы при наличии только серой выбранной панели, ищет любого, который Вы хотите быть перемещенными, которые не будут и изменяют фильтры соответственно. Аналогично, отображая только файлы, которые будут перемещены при наличии только зеленой выбранной стрелки, ищите любого, который был бы перемещен, но Вы не хотите быть и изменять фильтры соответственно.

0
ответ дан 7 October 2019 в 09:35

Вы могли использовать простой сценарий Python, чтобы сделать задание:

#!/usr/bin/env python3

import os
import shutil

source_dir = "/path/to/files"; target_folder = "/path/to/destination"; extensions = (".mp3", ".avi")

for root, dirs, files in os.walk(source_dir):
    for name in files:
        if name.endswith(extensions):
            file = root+"/"+name
            shutil.move(file, target_folder+"/"+name)

Вставка код выше в пустом текстовом файле, введите цель - и исходные каталоги, введите расширения файла, Вы хотите переместить, сохранить его как move.py и выполнить его командой:

python3 /path/to/move.py

, Чтобы постараться не перезаписать возможные дубликаты (и переименовывать их)

, Если существует риск, что каталог содержит дубликаты (имена), которые Вы хотите сохранить, код немного более обширен:

#!/usr/bin/env python3

import os
import shutil

source_dir = "/path/to/files"; target_folder = "/path/to/destination"; extensions = (".mp3", ".avi")

dup = 1
for root, dirs, files in os.walk(source_dir):
    for name in files:
        if name.endswith(extensions):
            file = root+"/"+name
            while os.path.exists(target_folder+"/"+name):
                name = name[:name.rfind(".")]+"_"+str(dup)+name[name.rfind("."):]
                dup = dup+1
            shutil.move(file, target_folder+"/"+name)

В этом случае, несколько случаев file.mp3 будут переименованы к:

file.mp3
file_1.mp3
file_2.mp3
...etc.
0
ответ дан 7 October 2019 в 09:35

Другие вопросы по тегам:

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