Вычесть число из перечисленных имен файлов

В Ruby вы можете использовать опцию 'm' (многострочный):

/YOUR_REGEXP/m

См. Regexp документацию на ruby-doc.org для получения дополнительной информации.

1
задан Tschaix 16 January 2019 в 09:26
поделиться

2 ответа

Предположим, что неправильный файл FILE_030.dat и у вас есть 300 файлов. Тогда вы могли бы сделать следующее:

#!/bin/bash
mv FILE_030.dat some_directory/
for ((i=31; i<=300; i++))
do
   filename=FILE_`printf "%03d" ${i}`.dat
   if [ -e ${filename} ]
   then
       newi=$(( $i - 1 ))
       newfilename=FILE_`printf "%03d" ${newi}`.dat
       # This should not happen
       if [ -e ${newfilename} ]
       then
           echo Error moving file ${filename} to ${newfilename}: ${newfilename} exists
           exit
       else
           mv ${filename} ${newfilename}
       fi
   fi
done

Если ваши файлы имеют имена, такие как FILE_00030.dat, то есть с 5 цифрами, то вы должны изменить %03d на 0%5d в приведенном выше коде. В качестве проверки безопасности приведенный выше сценарий останавливается, когда переименованный файл уже существует.

0
ответ дан francesco 16 January 2019 в 09:26
поделиться

Попробуйте этот код ( Shellcheck -clean) после правильной установки badfile и bad_files_dir:

#! /bin/bash

badfile=FILE_013.dat            # The bad file to be moved out
bad_files_dir=../badfilesdir    # The directory to receive the bad file

movedfile=
for file in FILE_[0-9][0-9][0-9].dat ; do
    if [[ -n $movedfile ]] ; then
        mv -- "$file" "$movedfile"
        movedfile=$file
    elif [[ $file == "$badfile" ]] ; then
        mv -- "$file" "$bad_files_dir"
        movedfile=$file
    fi
done
0
ответ дан pjh 16 January 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: