У меня есть каталог, заполненный различными файлами, с разными именами (то есть без имен с определенным шаблоном) и с разными расширениями, и я хочу поместить каждый файл во вновь созданный подкаталог, названный в честь каждого файла; Каков наилучший способ сделать это из командной строки под 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
на самом деле переименовать, я не придется беспокоиться об исключении вновь созданные каталоги); но в конце концов это вторичная проблема.