Как переместить файлы с определенным расширением файла из родительской папки, а также ее подпапок в новую папку

1214
Nevermind Susan

Я хочу переместить все файлы с такими расширениями, как: .JPEG .MP3 .MP4 .MOV .AVI .PDF .PSD .WAV .TXT

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

0
Вы можете использовать `find`, поскольку вы пометили этот Q, но лучшей идеей является использование` tar`, в котором есть переключатели для поддержки этого. Классический вызов (в верхней части дерева исходного кода) `tar cf - | (cd target; tar xf -) `, которая копирует все дерево. Вы бы хотели посмотреть страницу `man` для вашего tar, чтобы увидеть, как выбрать только те файлы, которые вы хотите. MAP 7 лет назад 0
К сожалению, это опечатка в команде `tar`, должна быть` tar cf -. | (cd target; tar xf -) `(должен сказать что-то, что нужно записать. MAP 7 лет назад 0
Какую ОС вы используете? Jonatan Öström 7 лет назад 1
Обратите внимание, что [SU] не является сервисом написания скриптов. Если вы сообщите нам, что вы уже пробовали (включая сценарии, которые вы используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 7 лет назад 0

2 ответа на вопрос

0
Nathan.Eilisha Shiraini

(После редактирования и комментариев) Этот скрипт должен делать это, включая подпапки:

@echo off for \r %%f in (*) do ( if not exist %%~xf mkdir %%~xf move /y %%f %%~xf\%%~nf.%%~xf ) pause 

Если вы никогда ранее не использовали пакетный скрипт, вот как он работает:

  1. Откройте Блокнот ( не MS Word или WordPad)
  2. Скопируйте / вставьте скрипт в него
  3. Файл -> Сохранить как
  4. В раскрывающемся меню «Тип» выберите «Все типы»
  5. Сохраните файл как something.bat(вы можете изменить его, somethingно он .batдолжен быть там)
  6. Поместите файл в тот же каталог, что и файлы, с которыми он должен работать
  7. Дважды щелкните файл

Убедитесь, что вы проверили его, прежде чем использовать. В pauseконце не требуется, он просто предложит вам нажать клавишу перед закрытием окна.

Это почти работает, так как создает папки с именами расширений файлов, но перемещает только файлы с соответствующими расширениями, которые находятся в той же папке, что и файлы .bat, во вновь созданные папки. Он не перемещает файлы, которые находятся в подкаталогах или файлы в папках. Мне нужно было бы скопировать и вставить файл .bat в каждую подпапку (более 500), чтобы отсортировать все файлы по расширению, оставив мне несколько папок JPEG .MP3 и т. Д. В каждой подпапке. Можно ли выполнить его из одной папки, в которой находятся все более 500 папок, содержащих файлы? Nevermind Susan 7 лет назад 0
Отредактированный пакетный скрипт, должен включать подпапки. Извините, я не видел этого вопроса в вашем вопросе ^^ Nathan.Eilisha Shiraini 7 лет назад 0
По-прежнему не включает содержимое подпапок. Может быть, я что-то не так делаю. Перед тем как заснуть прошлой ночью, я искал в корневой папке (звездочка с периодом звездочки), чтобы извлечь все файлы (280 000 файлов), и после этого используйте созданные вами пакетные файлы, чтобы отсортировать их в файлы, но безуспешно; выполнение пакетного файла показывает, что при повторном перемещении 0 файлов доступ запрещен. Я вошел как администратор. и использовал open как admin. а также при открытии командного файла. Есть идеи? Спасибо за вашу помощь до сих пор. Nevermind Susan 7 лет назад 0
0
dcook

Хорошо, я исправил свой код. Вам нужно сделать две вещи. Во-первых, у вас должен быть «directory_of_Files», который содержит все файлы и подпапки с файлами. Затем у вас должна быть новая родительская папка, «new_parent_directory», которая пуста. new_parent_directory будет организован по окончанию файлов из файлов в "directory_of_Files". По сути, этот сценарий ищет все файлы в каталоге и каталогах в этом каталоге, затем создает список окончаний файлов, а затем создает каталоги в новом каталоге на основе этих окончаний файлов, а затем принимает все файлы в родительском каталоге и перемещает их во вновь созданные каталоги.

Если у вас установлен Python .....

В терминале введите

python 

затем,

import os 

затем,

#this is ths directory that contains all your files  #YOU MUST CHANGE THIS!!!!!! directory_of_Files = "/Users/name/Desktop/test1"  #AND YOU MUST CHANGE THIS!!!!!! new_parent_directory = "/Users/name/Desktop/newhometest"  #From here down, it's all magic.  all_subfolders = [x[0] for x in os.walk(directory_of_Files)]  #Get the full file name and only the files filenames=[] for subfolder in all_subfolders: os.chdir(subfolder) for file in filter(os.path.isfile, os.listdir(os.getcwd())): if not file.startswith("."): filenames.append(os.getcwd()+"/"+file)  #get the file endings all_files_endings = [] for i in filenames: all_files_endings.append(i.split(".",1)[1])  #remove the duplications all_files_endings = list(set(all_files_endings))  #create some folders in the new_directory with the file endings for fileExtensions in all_files_endings: os.mkdir(new_parent_directory + "/" + fileExtensions)   #move the files from their old destination to their new destination  newnames=[] for subfolder in all_subfolders: os.chdir(subfolder) for file in filter(os.path.isfile, os.listdir(os.getcwd())): if not file.startswith("."): newnames.append(new_parent_directory+"/"+file.split(".",1)[1]+"/"+file) print file  if len(filenames) == len(newnames): for i in range(len(filenames)): shutil.move(filenames[i], newnames[i]) 

Я проверял это на Mac OSX 10.11 с python 2.7. Вы также можете просто скопировать весь код в текстовый файл, сохранить его как «нечто.py», а затем запустить его из терминала с кодом,

python something.py 
«Я не проверял это» Пожалуйста, не публикуйте непроверенный код ... DavidPostill 7 лет назад 0
Я не знал, что Python можно использовать в ОС Windows. Я скачал его, но понятия не имею, как реализовать то, что вы ответили. Nevermind Susan 7 лет назад 0
Спасибо Дэвид, я не знал правил. Да, Сьюзан, python - это просто еще один язык сценариев. ничего особенного. Возможно, он немного лучше, чем другие языки, потому что он более читабелен. Сценарий, который я предоставил, будет MOVE, а не переименует все файлы. Если вы просто хотите переименовать, поэтому у вас есть оригинальная резервная копия в старом месте, тогда измените самую последнюю строку на os.rename вместо shutil.move dcook 7 лет назад 0
Кук, я не использую OSX или Linux на боковых окнах 7 на этом компьютере. У меня LinuxMint / WindowsXP на другом рабочем столе, но на этом ноутбуке установлена ​​только Windows7. Python доступен для загрузки для windows7, я скачал и открыл приложение, и окно cmd открывается (я думаю, что эквивалент терминала), и поэтому я набрал python и нажал enter и получил: «NameError: имя« python »не определено» Nevermind Susan 7 лет назад 0
есть ли способ прикрепить снимки экрана к моим комментариям? первый раз с использованием суперпользователя Nevermind Susan 7 лет назад 0

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