【发布时间】:2014-04-09 10:59:12
【问题描述】:
在bash 中,我想测试一些目录是否包含我列入白名单之外的文件名:
[a-z]
[A-Z]
[0-9]
[+-_ßäöüÄÖÜ.,]
[ ]
(即一个空格可以,连续两个或多个空格不行)。
尝试
$ ls my/dir/ |grep --color=always -v [a][b][c][d][e][f][g][h][i][j][k][l][m][n][o][p][q][r][s][t][u][v][w][x][y][z][A][B][C][D][E][F][G][H][I][J][K][L][M][N][O][P][Q][R][S][T][U][V][W][X][Y][Z][0][1][2][3][4][5][6][7][8][9]
生成所有文件,甚至包含用于测试的# 字符的文件。
$ ls my/dir/ |grep --color=always -v [a-zA-Z0-9]
(是的,我知道稍后我必须在其中包含 [+-_ßäöüÄÖÜ., ] 字符)。
我已尝试为此使用diff:
$ diff -y <(ls -1 my/dir/) <(ls -1 /my/dir/|tr -cd '[a-zA-Z0-9\n\r \-\.\,]')|grep --color=never '|'|cut -d "|" -f 1
它输出我的tr 列表之外的文件名:
A File Containing Some Rainbo#ws.wav
但这似乎比较笨拙...有什么想法,嗯,更好?
【问题讨论】: