Вы, скорее всего, записали список файлов примерно так:
array=$(ls file* )
#or
array="$(ls file*)"
# array looks like:
# array[0]="file1 file2 file3"
Вместо этого вы можете записать несколько индексов в массиве, подобном этому, используя extra '(' and ')'
array=( $(ls file*) )
# array looks like:
# array[0]="file1"
# array[1]="file2"
# array[2]="file3"
, и тогда ваш код будет работать
или, возможно, вы использовали 'read' для чтения значений:
ls > files.txt
read array < files.txt
тогда вы хотите использовать 'read -a' вместо
read -a < files.txt
Если у вас установлен Perl rename
, вы можете сделать это с помощью:
find. -name '*:2f*' -type d -exec rename 's/:2f/_/g' {} \;
Если вы хотите сначала протестировать , добавьтеecho
:
find. -name '*:2f*' -type d -exec echo rename 's/:2f/_/g' {} \;
Спасибо, мне удалось заставить его работать, используя следующее:
find /path -depth -type d -name '*:2f*' -execdir bash -c 'mv -v "$1" "${1//:2f/_}"' _ {} \;