Создание .bash файла для тестирования на цикл

Я пытаюсь циклично выполниться через все файлы, расположенные в каталоге, заканчивающемся в .txt и переименовать их (заменяющий начало с конца). Однако я хотел бы взять вывод от этого для цикла и передать его по каналу в файл удара так, чтобы я мог проверить файл и удостовериться, что я записал, делает то, к чему я хочу его, затем я могу просто выполнить .bash файл, если то, что я вижу, соответствует задаче. Я попробовал

for file in *.txt ; do mv $file ${file//beginning/end} ; done | rename.bash

однако это переименовало файл и создало пустой rename.bash

1
задан 3 January 2019 в 22:38

2 ответа

Поместить echo прежде mv. Это распечатает команду вместо того, чтобы выполнить его.

Также:

  • Переменные кавычки для предотвращения разделения слова на пробелах в именах файлов. В этом случае необходимо будет поместить кавычки в кавычки, так как Вы производите к сценарию.

  • Я никогда не видел a .bash используемое расширение, таким образом, я предпочел бы .sh вместо этого для выходного сценария.

  • Вы не можете передать по каналу непосредственно в файл. Используйте перенаправление вывода > вместо этого. Если необходимо использовать канал, использовать tee.

В сумме:

for file in *.txt; do
    echo "mv '$file' '${file//beginning/end}'"
done > rename.sh
3
ответ дан 3 December 2019 в 06:29

Поскольку mv ничего не производит, и Вы не можете передать по каналу в файл.

То, что можно сделать, создают сценарий удара с помощью редиректора:

for file in *.txt
 do
 echo "mv $file $(some command to manipulate the text)" >> script.bash
done

Это добавит команду в файл.

3
ответ дан 3 December 2019 в 06:29

Другие вопросы по тегам:

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