Вычесть число из перечисленных имен файлов - PullRequest
0 голосов
/ 16 января 2019

У меня есть папка с перечисленными файлами с именами, такими как FILE_001.dat. В одном из файлов есть ошибка, поэтому я хотел бы вынуть ее из папки и переименовать следующие, чтобы у меня все они были последовательными без пробелов в нумерации. Кто-нибудь знает, как это сделать через bash?

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Попробуйте этот ( Shellcheck -чистый) код, после установки 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 голосов
/ 16 января 2019

Предположим, что неправильный файл 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 в приведенном выше коде. В целях безопасности проверка приведенного выше сценария прекращается, когда переименованный файл уже существует.

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