Я пытаюсь циклично выполниться через все файлы, расположенные в каталоге, заканчивающемся в .txt и переименовать их (заменяющий начало с конца). Однако я хотел бы взять вывод от этого для цикла и передать его по каналу в файл удара так, чтобы я мог проверить файл и удостовериться, что я записал, делает то, к чему я хочу его, затем я могу просто выполнить .bash файл, если то, что я вижу, соответствует задаче. Я попробовал
for file in *.txt ; do mv $file ${file//beginning/end} ; done | rename.bash
однако это переименовало файл и создало пустой rename.bash
Поместить echo
прежде mv
. Это распечатает команду вместо того, чтобы выполнить его.
Также:
Переменные кавычки для предотвращения разделения слова на пробелах в именах файлов. В этом случае необходимо будет поместить кавычки в кавычки, так как Вы производите к сценарию.
Я никогда не видел a .bash
используемое расширение, таким образом, я предпочел бы .sh
вместо этого для выходного сценария.
Вы не можете передать по каналу непосредственно в файл. Используйте перенаправление вывода >
вместо этого. Если необходимо использовать канал, использовать tee
.
В сумме:
for file in *.txt; do
echo "mv '$file' '${file//beginning/end}'"
done > rename.sh
Поскольку mv
ничего не производит, и Вы не можете передать по каналу в файл.
То, что можно сделать, создают сценарий удара с помощью редиректора:
for file in *.txt
do
echo "mv $file $(some command to manipulate the text)" >> script.bash
done
Это добавит команду в файл.