Переместить текстовый файл из нескольких папок и переименовать - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть несколько папок и внутри каждой папки имена файлов "tabled_output.tab". Я хотел бы переместить этот файл в новую папку и переименовать файл с исходным именем папки. Мне нужно запустить это в цикле, чтобы переместить все файлы "tabled_output.tab".

Это то, что я имею до сих пор:

 cd /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Output/
 ls > razas.txt
 cd /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Output/(x)
 mv tabled_output.tab (x)
 mv (x) /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Results/

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Вы можете сделать это с помощью одной команды:

find "<PATH_TO_OUTPUT>" -name "*" -type d -print -exec bash -c 'cd "$1";current_dir=${PWD##*/};mv tabled_output.tab <PATH_TO_RESULTS>"$current_dir".tab' -- {} \;

Этот скрипт ищет в каждой папке внутри папки Output и перемещает (если существует) файл tabled_output.tab в папку Results (необходимо указать абсолютный путь к этой папке). Изменение имени файла на имя папки, в которой он находится.

В вашем случае я считаю, что это будет работать, используя:

<PATH_TO_OUTPUT> = /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Output/

и

<PATH_TO_RESULTS> = /storage/home/iul116/.ssh/poblacionesmaices/inputfiles_osr/Results/

Извините за мой плохой английский.

0 голосов
/ 07 сентября 2018

Следующий скрипт Bash может помочь. Его следует запускать из родительского каталога папок, содержащих файлы для перемещения.

DESTDIR=tables
FILENAME=tabled_output.tab

mkdir -p $DESTDIR # -p flag => skip if directory already exists

# Search all folders in the current directory
for dir in `ls -d */`; do
    dir=${dir/\/} # remove trailing slash
    TMPNAME=$dir/$FILENAME # destination file
    # Check if a file called 'tabled_output.tab' exists
    # in the relevant sub-directory
    if [ -e $TMPNAME ]; then
        # If so, move it to the destination directory
        mv $TMPNAME $DESTDIR/$dir.tab
    fi
done

Обновление: Использование ls -d */ для получения списка подпапок не является идеальным - как отметил Стивен П. в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...