Невозможно удалить каталог со странным именем

Хорошо, вот сценарий, который делает что-то вроде того, что вы хотите.

#!/bin/bash

NEWFILES=${1}
INSERT_IDX=${2}
PREFIX="titlepage_"

# just in case
prefixnum=${filebase//[^0-9]/}
case $prefixnum in
  (*[![:blank:]]*) echo "invalid prefix, contains numbers"; exit 1;;
esac

# check input arguments
if [ ! $# -eq 2 ];
then
  echo "USAGE: insert.sh <newfiles> <insertion_index>"
  echo 'example: insert.sh "new.pdf new.tex" 2'
  exit 1
fi

## process infiles
for infile in ${NEWFILES}
do
  ext=${infile##*.}
  for file in $(ls -1 ${PREFIX}[0-9]*.${ext} | sort -rV)
  do

      filebase=${file%.*}
      number=${filebase//[^0-9]/}
      numberless=${filebase//[0-9]/}

      if [ "${numberless}${number}.${ext}" != "${file}" ];
      then
        echo "invalid file ${file}"
        echo "${numberless}${number}.${ext}" "${file}"
        exit 1
      fi

      if [ ${number} -ge ${INSERT_IDX} ]
      then
          echo "$file" "${numberless}$((${number} + 1))".$ext
          mv "$file" "${numberless}$((${number} + 1))".$ext
      else
        echo ${file}
      fi
  done
  echo "${infile}"  "${PREFIX}${INSERT_IDX}.${ext}"
  mv "${infile}"  "${PREFIX}${INSERT_IDX}.${ext}"
done
1
09.03.2020, 01:54
1 ответ

Вы можете использовать интерактивную опцию в rm. Он перечислит каждый файл и спросит, хотите ли вы его удалить. Таким образом, вы можете использовать подстановочные знаки только для тех битов, которые являются простым тестом :

.
rm -i *Flew*Cuckoo*Nest*

Это не работает для rmdir. Если каталог пуст, вы можете:

rm -ir *Flew*Cuckoo*Nest*

Или вы можете просто переименовать каталог во что-то, что вы можете ввести, при условии, что вы можете сопоставить его достаточно для уникальности:

mv *Flew*Cuckoo*Nest* BetterCuckooName
2
28.04.2021, 23:21

Теги

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