В Ruby ruby вы можете использовать опцию 'm
' (многострочный):
/YOUR_REGEXP/m
См. Regexp документацию на ruby-doc.org для получения дополнительной информации.
Предположим, что неправильный файл 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
в приведенном выше коде. В качестве проверки безопасности приведенный выше сценарий останавливается, когда переименованный файл уже существует.
Попробуйте этот код ( 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