Я все же советую людям использовать find
вместо глобуляции *
в сценариях. *
может работать не всегда надежно, может не работать и сбивать с толку.
Сначала мы создаем каталоги, чтобы перейти к:
mkdir -p ./jpg ./cr2
Обратите внимание, что -p
в mkdir
сделает mkdir
не ошибкой, если каталог уже существует.
Используйте find
. Найдите все файлы с именем *.JPG
и переместите каждый файл в jpg
:
find . -maxdepth 1 -mindepth 1 -name '*.JPG' -exec mv {} ./jpg \;
// similar
find . -maxdepth 1 -mindepth 1 -name '*.CR2' -exec mv {} ./cr2 \;
-maxdepth 1 -mindepth 1
таков, что find
не сканирует каталог рекурсивно, что по умолчанию. Вы можете удалить их, но при желании вы можете добавить -type f
, чтобы включить только файлы.
Примечания к вашему сценарию:
- Не анализировать вывод ls
- Вы можете использовать
find . -mindepth 1 -maxdepth 1 -file '*.jpg' -print . | wc -c
, чтобы получить количество файлов в каталоге.
for d in * .[!.]* ..?*; do
У меня есть смутное представление о том, что это должно делать, что-то вроде рекурсивного сканирования каталога. Если, если каталог JPG
находится внутри $(pwd)
, вы будете бесконечно сканировать себя и перемещать файл в себя и т. Д. Если папка назначения находится вне текущего каталога, просто измените сценарии find
, удалив -mindepth 1
, тогда он будет сканировать рекурсивно.
- Не используйте обратные пометки, они менее читабельны и устарели . Вместо этого используйте
$( .. )
.