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

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

Я пытаюсь написать скрипт, который находит определенный файл и перемещает его в папку.

    #!/bin/sh
echo -n "/home/cosmoretro/movie/"
        read text2
while :
        do
        echo -n "Ara:"
        read text1
        b=$(find /home/cosmoretro 2>/dev/null -iname "$text1"*)
        IFS=$'\n'
    mv $b /home/cosmoretro/movie/"$text2"
done

Но он также перемещает файлы, если есть файл, совпадающий с папкой, которую я ищу.

Все, что мне нужно, это переместить папку.

решение1

Мне даже читать этот сценарий тяжело. Могу ли я предложить вам немного его переписать?

#!/bin/sh
echo -n "/home/cosmoretro/movie/"
read destinationFileName

while :
do
    echo -n "Ara:"
    read sourceFileName
    sourceFile=$(find /home/cosmoretro -type d -iname "$sourceFileName" -print -quit 2> /dev/null)
    if [[ -z $sourceFile ]]; then
        echo "No file named $sourceFileName found"
    else
        mv -- "$sourceFile" /home/cosmoretro/movie/"$destinationFileName"  
    fi
done

Что я наделал:

  • Используйте описательные имена, например, destinationFileNameвместоtext2
  • Отступ должен быть правильным
  • Сделайте так find, чтобы находили только каталоги, указав -type d. Если вы хотите переместить только файлы, используйте -type fвместо -type d.
  • Переместите перенаправление в конец команды, так как это не важно.
  • Остановиться findпосле нахождения первого файла ( -quit)
  • Удалите лишнее *в findкоманде – не уверен, что вы хотели бы с ним там. Если вы хотели, чтобы имена файлов имели подстановочные знаки (например, поиск fooвернет foobar), то вам нужно поместить подстановочный знаквкавычки, "$sourceFileName*"т.е.
  • Проверьте, был ли вообще найден файл, -zпроверив, является ли результат пустым.
  • Защититесь mvот имен файлов, начинающихся с , -используя опцию end of options--
  • Правильно заключайте аргументы в кавычки, чтобы пробелы не нарушали работу команды (тогда нет необходимости что-либо менять IFS)

Связанный контент