Список только числовые имена файлов в каталоге - PullRequest
11 голосов
/ 30 июня 2010

У меня есть список файлов с числовыми именами файлов (например, # .php, ##. Php или ###. Php), которые я хотел бы скопировать / переместить одним махом.

Кто-нибудь знает комбо-команду ls или grep для достижения этой цели?

У меня так много:

ls -al | grep "[0-9].php"

Ответы [ 5 ]

8 голосов
/ 30 июня 2010

В Bash вы можете использовать расширенное сопоставление с шаблоном:

shopt -s extglob
ls -l +([0-9]).php

, в котором будут найдены такие файлы, как:

123.php
9.php

, но не

a.php
2b.php
c3.php
7 голосов
/ 30 июня 2010

Изменить это так:

ls -al | grep -E '^[0-9]+\.php$'

-E активирует расширенные регулярные выражения.

+ требует, чтобы появилось хотя бы одно вхождение предыдущей группы.

\. escape-точка, в противном случае это означает «любой символ».

^ и $ для соответствия всему имени файла, а не только его части.

Одинарные кавычки для предотвращения расширения переменной (будет жаловаться из-за $).

4 голосов
/ 30 июня 2010

Используйте находку:

$ find . -regex '^[0-9]+\.php' -exec mv '{}' dest/ ';'

Обратите внимание, что аргумент -regex выполняет поиск, а не совпадение, поэтому ^ используется для привязки его к началу. Это также предполагает, что файлы находятся в том же каталоге (.), Что и тот, в котором вы находитесь при запуске команды.

Обман {} в команде mv заменяется на find найденным именем файла.

2 голосов
/ 30 июня 2010

Либо используйте find (возможно, в сочетании с параметрами -XXXdepth):

find . -mindepth 1 -maxdepth 1 -regex '^[0-9]+\.php' -exec mv '{}' dest/ ';'

Или используйте встроенные возможности регулярных выражений:

pattern='^[0-9]+\.php$'
for file in *.php
do
    [[ $file =~ $pattern ]] && echo "$file"
done

Не используйте ls или grep.

0 голосов
/ 30 июня 2010

Вы можете использовать регулярное выражение при перечислении файлов:

ls [0-9]*

Это был простой и минималистичный подход к вышеуказанной проблеме, но я думаю, что лучшее решение -

ls -al | grep -E '^[0-9]+\.php$'

как объясняет UncleZeiv ниже .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...