У меня есть каталог, заполненный различными файлами, с разными именами (то есть без имен с определенным шаблоном) и с разными расширениями, и я хочу поместить каждый файл во вновь созданный подкаталог, названный в честь каждого файла; Каков наилучший способ сделать это из командной строки под Linux?
Это звучит немного запутанно, позвольте мне привести пример: давайте вызовем случайный файл в каталоге ./filename.ext , я бы хотел поместить его в подкаталог с именем ./filename чтобы новый путь был ./filename/filename.ext .
Я сделал несколько испытаний со следующими шагами:
- Я создал несколько тестовых файлов, от
file-1.txtдоfile-9.txt, внутри тестового каталога с параметромfor num in {1..9}; do touch file-$num.txt; done - Я создал каталог с именем каждого файла с
for name in $(eval ls | cut -b 1-6); do mkdir $name; done - Я переместил исходные файлы в соответствующие каталоги с
for name in $(eval ls | grep -e ".txt" | cut -b 1-6); do mv $name.txt $name/$name.txt; done
Как вы можете видеть, это решение работает, но его огромный недостаток заключается в том, что оно работает именно в этом случае с файлами с указанным размером файла и с конкретным расширением. Если у меня есть несколько файлов с разными именами и расширениями, это будет бесполезно. Полагаю, использование команды cut не является идеальным решением, но в настоящий момент я не нашел ничего лучшего.
В качестве бонуса, это было бы здорово , чтобы найти способ , чтобы создать подкаталоги автоматически при перемещении / переименование файлов, без необходимости использовать mkdir ранее (поэтому , когда я ls на самом деле переименовать, я не придется беспокоиться об исключении вновь созданные каталоги); но в конце концов это вторичная проблема.
