Найти и заменить строку в именах каталогов

Вы, скорее всего, записали список файлов примерно так:

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
6
11.07.2017, 18:22
2 ответа

Если у вас установлен Perl rename, вы можете сделать это с помощью:

find. -name '*:2f*' -type d -exec rename 's/:2f/_/g' {} \;

Если вы хотите сначала протестировать , добавьтеecho:

find. -name '*:2f*' -type d -exec echo rename 's/:2f/_/g' {} \;
6
27.01.2020, 20:25

Спасибо, мне удалось заставить его работать, используя следующее:

find /path -depth -type d -name '*:2f*' -execdir bash -c 'mv -v "$1" "${1//:2f/_}"' _ {} \;
3
27.01.2020, 20:25

Теги

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