Объединение пар файлов в цикл

Я нашел решение, во многом полагающееся на tmux. Поскольку tmux работает независимо от оболочки и превалирует даже после закрытия окон, можно подготовить сеанс tmux, а затем подключиться к нему. Вещь не выйдет мгновенно, так как команда прикрепления не вернется, если вы не выйдете из нее.

Это, а также тот факт, что вы можете назвать и искать сеанс, дает следующий Nautilus-Script:

#!/bin/bash
# nautilus script to start files in nvim under a tmux session
# place this script into ~/.local/share/nautilus/scripts/nvimOpen.sh
# presented without warranty by mike aka curvi

# nvim running in another session? -
# TODO tmux rename-session -t $whaever nvim

# Tmux session 'nvim' is running neovim always!
if tmux has-session -t nvim ; then
  # test if it is open and split it
  for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do
    tmux send-keys -t nvim Escape # change to normal mode
    tmux send-keys -t nvim ";vsp $selected_file" Enter # open file in vsplit
  done
else
  # or start it up freshly!
  tmux new-session -d -s nvim ;
  tmux send-keys -t nvim "nvim -O $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" Enter
  tmux send-keys -t nvim Escape # change to normal mode
fi
# after the tmux session is prepared - attach to it in gnome-terminal!
gnome-terminal -e "tmux attach-session -d -t nvim"

Бонус: поскольку я отправляю ключи, вместо того, чтобы вводить команды напрямую, они появляются в истории терминала, как и ожидалось!

Внимание: мой nvim / init.vim содержит переназначение ; на : , что означает, что для запуска нужно проверить отправленные ключи на «обычные» настройки vim / neovim!

1
25.01.2017, 20:29
2 ответа

Просто потому, что это возможно, вот подход find + bash .

$ ls
a.ID  a.value

$ find -type f -iname "*.ID" -exec bash -c 'base=$(basename -s ".ID" "$@");cat "$@" "$base".value > "$base".merged' sh   "{}" \;

$ ls
a.ID  a.merged  a.value

$ cat a.merged                                                                                                           
chr1_237301_237601  176 1  
chr1_237601_237901  176 1  
chr1_237901_238201  176 1 
chr1_1_301      0   0  
chr1_301_601    0   0  
chr1_601_901    0   0 
0
27.01.2020, 23:13

Вам не нужны две петли. Вам нужен одиночный цикл, через a , b , c и т. Д. Примерно так:

for i in *.ID; do
    b=${i%%.ID}
    cat "$i" "$b".value >"$b".txt
done
7
27.01.2020, 23:13

Теги

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