перемещать файлы, которые не содержат конкретной строки - PullRequest
1 голос
/ 28 мая 2019

Я хотел бы переместить файлы, используя mv, которые не содержат буквы S в имени файла. Не удалось найти ничего в руководстве по mv. Может быть, комбинация с find или grep? Он должен быть чувствительным к регистру.

ввод:

  file1
  fileS1
  file2
  fileS2

файл для перемещения:

  file1
  file2

Ответы [ 4 ]

2 голосов
/ 28 мая 2019

Вы можете сделать выбор в чистом Bash без какого-либо дополнительного программного обеспечения, если вы включите расширенное перетаскивание , которое по умолчанию отключено:

shopt -s extglob
mv !(*S*) /target/dir

Для получения дополнительной информации найдите extglob на странице справочника bash(1) (информация находится во втором совпадении).

1 голос
/ 28 мая 2019

Вы также можете использовать переключатель Ignore-pattern из ls, например:

mv $(ls -I '*S*') /target/dir
1 голос
/ 28 мая 2019

Вы можете использовать find с флагом -not, например.

find /path/to/source/dir -type f -not -name '*S*' \
    | xargs mv -t /path/to/target/dir
0 голосов
/ 28 мая 2019
Флаг

GREP * -v также может быть использован здесь. Согласно документам,

-v, --invert-match Инвертируйте смысл соответствия, чтобы выбрать несовпадающие строки.

Просто используйте

ls | grep -v '*S*' | xargs mv -t target_dir/

Также см. этот пост.

...