Эта команда должна делать то, что вы ожидаете:
find "/media/sergio/Seagate Expansion Drive/DOWNS/Spring Framework 5" -type f \! -iname '*.mp4' -execdir mkdir -p rest \; -execdir mv "{}" rest/ \;
В этой команде:
-type f
:сопоставлять только файлы (избегать перемещения каталогов, символических ссылок или специальных файлов)
\!
:действовать как логическое «НЕ»
-iname
:выберите файлы, совпадающие по имени, без учета регистра (Используйте -name
, если вы хотите, чтобы они соответствовали регистру)
-execdir
:запускает команду из подкаталога, содержащего соответствующий файл. Их нам нужно две, одна для создания папки rest/
, а вторая для перемещения в нее файла.
отредактировать :добавить отсутствующий интерлиньяж \;
, использовать execdir
и оставить только одно решение.
Повторять не нужно,
array=("folderA" "folderX")
find "${array[@]}" -maxdepth 1 -type f -empty
./"${array[@]}"/*
расширяется до:
./folderA folderB/*
, потому что ./
идет в начало первого элемента, а /*
идет в конец второго.
Что вам нужно сделать, так это добавить / *к каждому элементу массива, чтобы добавить суффикс:
"${array[@]/%//*}"
Вы можете выполнить поиск ${var/%Pattern/Replacement} здесь для получения дополнительной информации и узнать, как также добавить «./» в начало (, хотя для вашего конкретного случая указано выше замены достаточно ).
Альтернативное простое решение:
for i in "folderA" "folderX"
do find "$i" -type f -empty
done
Обязательно укажите путь с именем папки, например «/usr/local», если сценарий запускается из другого места.
Редактировать :Кроме того, как правильно указано, если вы хотите ограничить область поиска, используйте ее с максимальной глубиной соответственно:
for i in "folderA" "folderX"
do find "$i" -maxdepth 1 -type f -empty
done
Возможно, это поможет вам получить ожидаемый результат
#!/bin/bash
arr=("folderA" "folderX") # Storing folder names to an array
arr_count=${#arr[@]} # Stroing count of element's in an array
echo "Count of array : $arr_count" # Printing the count of elements present in an array
for (( i=0 ; i<2 ; i++ ))
{
find "$(pwd)"/"${arr[$i]}" -empty -type f
}
Если вы хотите удалить этот пустой файл, просто добавьте это -delete
к приведенной выше команде поиска
find "$(pwd)"/"${arr[$i]}" -empty -type f -delete