Для этого вы можете написать свой собственный небольшой сценарий оболочки. Например, создайте файл mytmux
где-нибудь в своем PATH
и сделайте его исполняемым chmod +x mytmux
с этим содержимым:
#!/bin/bash
rotate(){
file=/tmp/mytmux.$session
if [ -f "$file" ]
then rm "$file"
else touch "$file"
while [ -f "$file" ] && tmux next-window -t "$session"
do sleep 3
done
fi
}
case $1 in
-rotate)shift
session=${1?session name}
rotate ;;
esac
Я сделал так, чтобы она принимала аргумент -rotate
на случай, если позже вы добавите другие вспомогательные процедуры. К вашему ~/.tmux.conf
добавьте подходящую привязку, например:
bind-key C run-shell -b 'mytmux -rotate #{session_name}'
-b
должен работать в фоновом режиме. При первом вводе control -bC файл tmp не существует, поэтому цикл while запускается, выдавая команду next-window
каждые 3 секунды. Второй раз файл tmp удаляется, и первый скрипт останавливается. Вы должны подождать 3 секунды, прежде чем начать снова, иначе вы можете запустить 2 скрипта!
Вам нужно перебрать файлы:
for file in Test_*.txt; do
fileroot=${file%.txt} # remove the extension
cp -v "$file" "${fileroot}_Timestamp.txt"
done
Проблема -, как вы, возможно, выяснили -, заключается в том, что вы предполагали в своей первоначальной попытке, что фактическое значение подстановочного знака "передается" между различными аргументами вашей команды (, т.е. из вашего источника имя файла на предполагаемое целевое имя файла ).
Однако это не то, как расширение подстановочных знаков (или, скорее, "подстановочное расширение" )работает в оболочке. Скорее, везде, где появляется подстановочный знак, оболочка расширяет его внутри до списка совпадающих файлов и выполняет вашу команду, как если бы вы указали весь список (, см., например. это руководство по подстановке оболочки ). Итак, если у вас есть файлы
Test_a.txt
Test_b.txt
Test_c.txt
в вашем каталоге, ваша команда cp
фактически будет вести себя так, как если бы вы набрали
cp Test_a.txt Test_b.txt Test_c.txt Test_*_20200102-160523.txt
Поскольку последний аргумент принимается в качестве места назначения команды копирования, и вы указали несколько исходных файлов, cp
предполагает, что это каталог, и жалуется, что каталога с таким именем не существует.
Почему теперь он жалуется на отсутствие каталога Test_*_20200102-160523.txt
с литералом*
в нем? Стандартное поведение (по крайней мере дляbash
)заключается в том, что если вы укажете подстановочный знак, а соответствующий файл отсутствует, подстановочный знак будет интерпретироваться буквально как сам -, и поскольку ваше выражение Test_*_20200102-160523.txt
предназначалось как имя целевого файла, он еще не существует в текущем каталоге.
Это причина ответа @glennjackman о том, что вам нужно перебрать входные файлы для достижения желаемого результата.