Скрипт оболочки Переименовать

Итак, вы хотите что-то подобное:

tree | sed 's/├\|─\|│\|└/ /g'

Он заменяет все эти «строчные» символы местами.


См.:

$ tree
.
├── dir1
│   ├── file1
│   └── file2
└── dir2
    ├── file1
    └── file2

2 directories, 4 files
$ tree | sed 's/├\|─\|│\|└/ /g'
.
    dir1
        file1
        file2
    dir2
        file1
        file2

2 directories, 4 files

-121--102508-

Достаточно простой способ устранения петель, запущенных в интерактивном режиме, состоит в остановке команды ( Ctrl - Z ), которая должна печатать номер задания, скажем [2] + Stopped , которую затем можно убить с помощью kill% 2 .

-121--82007-

Здесь найдено решение awk без печати новой строки .

Переменная ORS (разделитель выходных записей) в AWK по умолчанию имеет значение «\n »и печатается после каждой строки.

1
19.07.2018, 15:56
1 ответ

Прежде всего, $(command_string)выдаст ошибку «bash :команда _строка :команда не найдена» как подстановка команды.Подстановка команды запустит команду в скобках и заменит все это выводом этой команды.

Во-вторых, даже если вы использовали только $command_stringдля выполнения своей команды, вы все равно добавляете одинарные кавычки к именам файлов. В именах файлов нет одинарных кавычек.

В общем, просто избегайте помещать команды в переменные. См. «Как мы можем запустить команду, хранящуюся в переменной? ».

Вместо этого может быть что-то вроде этого:

#!/bin/bash

for pathname in tracks/*; do
    if [[ "$pathname" =~ ([0-9]+)[[:blank:]]* ]]; then
        newpathname="${pathname%/*}/${BASH_REMATCH[1]}"
        printf 'Would move "%s" to "%s"\n' "$pathname" "$newpathname"
        # mv -i "$pathname" "$newpathname"
        break
    fi
done

Этот цикл делает (Я думаю )то, что вы пытаетесь сделать. Я закомментировал часть, которая фактически переименовывает файл для безопасности.

2
27.01.2020, 23:31

Теги

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