Какой ярлык для удаления слова «вперед» в терминале unix?

Я сделаю следующие предположения:

1) все имена файлов уникальны

2) Вы хотите только проверить отсутствующие файлы ( нет, если файлы имеют одинаковую сумму md5 на каждом устройстве, т.е. если картинка повреждена)

3) Файлы могут отсутствовать только на машине, на SD-карте по умолчанию есть все файлы.

Кроме предположения 1, script можно изменить, чтобы найти отдельные файлы в любом месте или даже выполнить перекрестную проверку md5 для каждой пары файлов.

Таким образом, мы можем использовать find , выбрать все имена файлов и проверить списки на наличие uniq имен файлов ue

#!/bin/bash

#load all file names from local dir as array:
pics_local=( $( find /path/to/dir/ -type f -printf "%f\n" ) )
#load all file names from SD card as array:
pics_SD=( $( find /mnt/SD/ -type f -printf "%f\n" ) )
#see if files are only in one of them,
#i.e. if file names appear only once (save as array):
singulars=( $( printf "%s\n" ${pics_local[@]} ${pics_SD[@]} |\
            sort | uniq -u ) )
#print list of missing files with full paths using find:
for (( i=0 ; i<=${#singulars[@]}-1 ; i++ )) ; do
    find /mnt/SD/ -type f -name "${singulars[$i]}"
done

ОБНОВЛЕНИЕ: скрипт с md5sum для каждый файл: у нас есть все файлы на SD, и мы ищем недостающие в локальном каталоге. Все локальные файлы идентичны файлам SD (нет соответствующих файлов с несовпадением сумм md5)

#!/bin/bash

#load file names and md5sums of files on SD card into array
files_SD=( $( find /mnt/SD/ -type f ) )
md5_SD=( $( find /mnt/SD/ -type f -exec md5sum {} + | cut -d' ' -f1 ) )
#load md5sums of files in local folder into array:
md5_loc=( $( find /local/dir/ -type f -exec md5sum {} + | cut -d' ' -f1 ) )

#check for the very unlikely possibility of md5sums
#matching for more than two files
#IMHO: can be safely skipped
if [[ $(sort <( printf '%s\n' ${md5_loc[@]} ${md5_SD[@]}) |\
      uniq -c | awk ' $1 >= 3 ' ) ]] ; then
  echo "md5 sums matching for more than 2 files!"
  echo "critical error, aborting"
  exit
fi

singular_md5s=( $( printf '%s\n' ${md5_loc[@]} ${md5_SD[@]} | sort | uniq -u ) )
for (( i=0 ; i<=${#singular_md5[@]}-1 ; i++ )) ; do
  #assume SD card has all files
  #print file that is missing in local folder:
  #1) find where it is in the array:
  n=$(( $(grep -n "${singular_md5s[$i]}" <( printf '%s\n' ${md5_SD[@]} ) | cut -d: -f1 )-1 ))
  #2) print file name
  echo "${files_SD[$n]} missing on local folder"
done
12
25.09.2017, 20:20
3 ответа

Это зависит от вашей оболочки и активного режима редактирования командной строки.

Для оболочки с режимом редактирования командной строки Emacs(set -o emacsв некоторых оболочках )используйте Alt+D(по какой-то причине это не работает в macOS, но печатает символ , используйте Escd вместо ).

Для оболочки с режимом редактирования командной строки Vi(set -o viв некоторых оболочках )используйте Escdw(это действительно работает и на macOS ).

23
27.01.2020, 19:56

В терминале Linux можно попробовать Ctrl + K для удаления от курсора до конца строки.

Есть несколько других ярлыков, таких как:

  • Ctrl + E:переместить курсор в конец строки.
  • Ctrl + T:перевернуть два символа вокруг курсора.
  • Ctrl + Y:извлечь текст из кольца уничтожений (вставить ранее удаленный текст ).
  • Ctrl + U:удалить текст от начала строки до курсора.
  • Ctrl + O:отправить текущую строку и загрузить следующую строку из истории (если есть ).
  • Ctrl + P:выбрать предыдущую строку из истории (как ).
  • Ctrl + K:удалить оставшуюся часть строки после курсора.
  • Ctrl + A:переместить курсор в начало строки.
  • Ctrl + D:если строка пуста, эквивалентно EOF; как правило, выход из оболочки. В противном случае удалите символ после курсора.
  • Ctrl + F:переместить курсор вперед на один символ.
  • Ctrl + H:аналогично Backspace .
  • Ctrl + J:аналогично Введите .
  • Ctrl + M:аналогично Введите .
  • Ctrl + B:аналогично .
  • Ctrl + W:удалить слово слева от курсора.
3
27.01.2020, 19:56

Для дисциплины tty line ^Wудаляет предыдущее белое -разделенное пробелом слово .

В редакторе viв режиме вставки ^Wудаляет назад к началу первой последовательности альнумов или не -альнумов (в foo-+-bar.. baz, сначала удаляет baz, затем .., затем bar, затем -+-, затем foo).

В редакторе emacs^Wудаляет из позиции курсора до метки (, которую вы установили с помощью Ctrl+Пробел).

Некоторые строковые редакторы, такие как readline(, используемые bash, gdb... ), zle(, используемые zsh), pdkshв режиме vi, ведут себя как viв этом отношении и в режиме emacsведет себя как дисциплина линии tty (, а неemacs).

libedit(используется оболочками BSD или (опционально )dash), tcsh, AT&T ksh, в режиме emacsведет себя как emacs, где ^Wудаляется до метки (изначально в начале буфера ).

Для удаления слова вперед в редакторе viвы должны сделать это в команде(нормальном)режиме с dwдля удаления в начало следующей последовательности номеров или не -alnums (или конец строки )и dWдля удаления в следующую последовательность не -пробелов (подвеска ^Wдисциплины tty line ).

В строковом редакторе emacsMeta -D будет удаляться до конца следующей последовательности символов alnum. Аналогично ведут себя операторы движения слов(Meta -B , Meta -F ).

Редакторы командной строки

в режиме viведут себя как vi, но в режиме emacsу вас есть две основные школы :школа tcshи школа ksh.

Школа ksh(readline, ksh,yash)ведет себя в основном так же, как поведениеemacs(fishнемного отличается тем, как она относится к не -alnum,не -пробельные символы в режимах emacsи vi).

В школе tcsh(tcsh, libedit,zsh)движения слов основаны на словах, разделенных пробелами -, поэтому в этом отношении они соответствуют дисциплине tty line ^W.

В zshповедение настраивается с различными стилями слов для всех виджетов движения слов.

Для readlineвы можете получить tcshшколу (и Мета -D удалить такое же слово, как Ctrl -W делает ), добавляя к вашему~/.inputrc:

set keymap vi-move
"\e[EMACS~": emacs-editing-mode
set keymap emacs
"\e[VI~": vi-movement-mode
"\ed": "\e[VI~dW\e[EMACS~"
"\ef": vi-fWord
"\eb": vi-bWord

Или, с другой стороны, выровняйте ^Wпо другому слову виджеты движения (ведут себя как Meta -Backscape)с:

set keymap emacs
"\C-W": backward-kill-word

О том, что такое Мета-ключ , см. там .

3
27.01.2020, 19:56

Теги

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