开发者

List only numeric file names in directory

I have a list of files with numeric file names (e.g. #.php, ##.php or ###.php) that I'd like to copy/move in one fell swoop.

Does anyone know of an ls or grep combo command to 开发者_Python百科accomplish this objective?

I do have this much:

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


In Bash, you can use extended pattern matching:

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

which will find files such as:

123.php
9.php

but not

a.php
2b.php
c3.php


Amend it like this:

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

-E activates the extended regular expressions.

+ requires that at least one occurrence of the preceding group must appear.

\. escape dot otherwise it means "any character."

^ and $ to match the entire filename and not only a part.

Single quotes to prevent variable expansion (it would complain because of the $).


Use find:

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

Note that the -regex argument does a search, not a match, which is why the ^ is there to anchor it to the start. This also assumes that the files are in the same directory (.) as the one you're in when running the command.

The {} trickery in the mv command is replaced by find with the found filename.


Either use find (possibly combined with the -XXXdepth options):

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

Or use the builtin regex capabilities:

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

Don't use ls or grep.


This below worked in my case:

ls -an


You can use regular expression when listing files:

ls [0-9]*

This was an easy and minimalistic approach at the above problem but I think a better solution is

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

as UncleZeiv explains below.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜