Двигать файл используя Shell в linux U получать path+filename расположенного напротив файла

у меня есть следующий код:

#!bin/bash

#Path del archivo .config
. /home/$USER/Documentos/source.config

counter=0

#Busqueda de directorios con archivos .zip
while [ $counter -le 0 ]
do
    if find $dirGeneral -iname "*.zip" -exec -quit;
     then
        #Proceso cuando encuentro archivo .zip

    else
        echo "the file does not exist!"
fi
   counter=$(( $counter +1 ))
done

То, что я хочу, состоит в том, чтобы, когда будет находиться файл (Первое совпадение .zip) сохраняло маршрут и имя файла, находившегося в переменной, или двигать немедленно файл, подуманный в другой маршрут.

if find $dirGeneral -iname "*.zip" -exec -quit;

Я не смог находить большую информацию по этому поводу, (Скорее я не знаю правильные условия, чтобы искать и это делать из-за меня самого.)

1
задан 30.10.2019, 22:23
2 ответа

в конце концов с достаточно investigaciГіn я смог реализовывать то, в чем он нуждался... Я не думаю, что он та soluciГіn mГЎs эффективная, но функционируй.

#!bin/bash

#Path del archivo .config
. /home/$USER/Documentos/source.config

counter=0

if [ "$(ls -A $dirTrabajo)" ]; then
        echo "Existen archivos en el directorio de trabajo"
else
    #Busqueda de los archivos con extensión .zip en el directorio general
    find $dirGeneral -name '*.zip' | while read line; do

        while [ $counter -le 0 ]
        do
        cd "${line%/*}/"
            if [ -f "$metadata" ]
            then
                #Mover, descomprimir archivo .zip y mover metadata.txt al directorio de trabajo
                if [ "$(ls -A $dirTrabajo)" ]; then
                        echo "OK"
                else
                urlpath="${line%/*}/"
                mv $urlpath''$metadata $dirTrabajo'/'
                mv $line $dirTrabajo'/'

                cd $dirTrabajo'/'
                unzip \*.zip
                echo "Proceso exitoso."
                fi
                counter=$(( $counter +1 ))
            else
                counter=$(( $counter +1 ))
            fi
        done
        counter=0
    done
fi
0
ответ дан 01.12.2019, 14:46

У тебя есть несколько cositas, которые могут становиться лучше aquГ-. Сначала, estГЎs бросая find, часть mГЎs медленная твоего рукописного шрифта, часто, когда только тебе нужна одна. AdemГЎs, ты не поместил твои переменные в кавычки, вещь, что harГЎ, что твой рукописный шрифт не функционировал правильно, если имена твоих файлов содержат место, tabs, lГ-neas новости (sГ, - они могут быть в имени файла), или символы glob (*, ? и т.д.).

BГЎsicamente, если ты только хочешь найти файл, тебе не надо никакой цикл:

fichero=$(find "$dirGeneral" -iname "*.zip" | head -n1)

Или, для того, чтобы оно функционировало с редкими именами:

fichero=$(find . -iname "*.zip" -print0 | head -zn1)

И уже estГЎ. Тогда, твой рукописный шрифт serГ - в:

#!/bin/bash

. /home/"$USER"/Documentos/source.config

fichero=$(find . -iname "*.zip" -print0 | head -zn1)
mv "$fichero" /otro/directorio
3
ответ дан 01.12.2019, 14:46
  • 1
    Привет, очень ú til комментарий, внизу coloqué которое в конце концов я resultó... Я gustarí чтобы знать твой opinió n этого có я говорю... Большое спасибо из-за того, что отвечает. – Brayan Lopez 05.11.2019, 23:21