我不知道在StackOverflow上发布你自己的问题答案是否合法,但我看到没有人问过这个问题.我去寻找一个C#Glob并没有找到一个,所以我写了一个其他人可能觉得有用的.
我知道我可以使用以下命令在OSX下转换单个文件编码:
iconv -f ISO-8859-1 -t UTF-8 myfilename.xxx > myfilename-utf8.xxx
我必须转换一堆具有特定扩展名的文件,所以我想将文件编码从ISO-8859-1转换为UTF-8,用于文件夹/ mydisk/myfolder中的所有*.ext文件
或许有人知道如何做到这一点的语法
谢谢
EKKE
如何转换包含glob字符的字符串,如
/var/lib/gems/*/bin
Run Code Online (Sandbox Code Playgroud)
到一个冒号分隔的文件名字符串(即PATH兼容)匹配模式?
即echo /var/lib/gems/*/bin会返回
/var/lib/gems/1.8/bin /var/lib/gems/1.9.1/bin
Run Code Online (Sandbox Code Playgroud)
我想要
/var/lib/gems/1.8/bin:/var/lib/gems/1.9.1/bin
Run Code Online (Sandbox Code Playgroud)
代替.
显而易见的方法是简单地用':'via替换空格字符tr,但是如果文件名本身包含空格字符则不起作用.
我一直在尝试使用JDK7中的新globbing功能,从文档和示例开始
我可以得到像我这样"glob:*.dat"的人
Files.walkFileTree(startingDir, finder);
Run Code Online (Sandbox Code Playgroud)
例如,但我无法使"**"语法正常工作.我希望能够创建类似的东西:
matcher = FileSystems.getDefault().getPathMatcher("glob:" + "foo/**/bar/*.dat");
Run Code Online (Sandbox Code Playgroud)
并希望得到一个简单的例子.我使用的是Windows 7.
更新:@Oleg和@JBNizet清楚地表明"/"语法与操作系统无关.请注意,Javadocs建议也可以使用依赖于操作系统的语法(需要)
仍有问题:已采取@Nizet并编辑如下:
@Test
public void testStackoverflowGlobber() throws IOException {
final PathMatcher matcher =
FileSystems.getDefault().getPathMatcher("glob:*.cml");
Files.walkFileTree(Paths.get("d:/petermr-workspace/jumbo-converters/jumbo-converters-cli/src/test/resources"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("try>> "+file);
if (matcher.matches(file)) {
System.out.println("MATCHES>>"+file);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
这给出了如下输出:
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdx
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdxml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cml
try>> …Run Code Online (Sandbox Code Playgroud) 在这个问题中,海报询问如何在一行中执行以下操作:
sub my_sub {
my $ref_array = shift;
my @array = @$ref_array;
}
Run Code Online (Sandbox Code Playgroud)
凭借我对基本Perl魔法的了解,我可以通过简单地使用以下内容来避免:
sub my_sub {
my $ref_array = shift;
for (@$ref_array) {
#do somthing with $_ here
};
#use $ref_array->[$element] here
}
Run Code Online (Sandbox Code Playgroud)
然而,在这个答案中,SO的当地僧侣之一提出:
sub my_sub {
local *array = shift();
#use @array here
}
Run Code Online (Sandbox Code Playgroud)
当我问
在尝试学习中级Perl魔法时,我可以问一下,你在这里设置什么是什么?您是否将@array的引用设置为已传入的arrayref?你怎么知道你创建@array而不是%array或$ array?我在哪里可以了解有关此*运算符的更多信息(perlop?).谢谢!
有人建议我把它作为一个新帖子,尽管他确实提供了很好的参考.无论如何,这里呢?有人可以解释什么被分配给什么以及如何创建@array而不是%array或$ array?谢谢.
我正在使用msysgit(1.7.9),我正在寻找正确的git ls-files命令调用,以显示当前级别的(跟踪的)文件和目录,无论是从索引还是当前工作目录,如果这是更轻松.
基本上它会给出一个类似于你在Github上看到的目录列表.来自Windows,我不太熟悉正确的方法(?).
我正在使用gulp使用以下代码将所有文件从一个目录复制到另一个目录:
gulp.src([ 'app/**/*' ]).pipe(gulp.dest('dist'));
Run Code Online (Sandbox Code Playgroud)
Glob文档说*匹配所有文件,但实际上.gitignore不会复制名称以dot开头的文件.
如何解决这个问题?
我有一个php应用程序(按要求)扫描一些文件的存在.(在网络共享上)
我正在使用glob这个,因为通常我只知道文件名的开头.
我注意到,这glob不会返回当前由任何客户端打开的文件,因此我的应用程序认为file_xy不存在,如果有人打开它.
有没有办法让glob回复打开(:=锁定?)文件?
奇怪的是,这没有提到的地方.但是我可以确认glob不返回当前由客户端打开的文件...(一旦客户端关闭访问应用程序,glob将像往常一样返回文件)
ps.:glob("\\server\share\*")只要打开文件就不会返回文件.(网络共享允许最大并发用户数)
$dir = opendir ("\\server\share");
while ($file = readdir($dir)){
echo $file."<br />";
}
Run Code Online (Sandbox Code Playgroud)
无论是否由其他客户打开,都可以完美地显示相关文件. - 所以我几乎可以排除任何访问限制/许可的东西......
我想通了的原因,即使我不知道原因,现在:
glob()当文件位于使用Windows Server 2012 R2内置重复数据删除功能的驱动器上时,将显示未找到打开文件的问题.
如果我将文件移动到非重复数据删除共享glob(),即使由多个客户端打开,也可以读取它.
由于我有一个可行的替代方案,这个问题应该主要关注为什么 glob不起作用的问题- 或者让我们说这里的工作不同.在如何glob以及readdir访问底层文件系统以确定内容方面必须有所不同.
还有另一个证明,这与数据重复数据删除有关:我将该功能配置为"仅"重复删除超过3天的文件.
我设置了一个cronjob,"打开并整理"共享中的某个文件.一旦它大约3天(Windows决定何时进行重复数据删除),当它由另一个客户端打开时,glob无法列出该文件.
因此,glob能够找到打开的文件,这些文件在前3天内被复制到共享中 - 然后在进行重复数据删除后开始错过它.
glob 失败,导致这篇文章:-)
使用上面提到的scandir函数显示了相同的行为:
我想再次强调, …
我用Java编写了一个程序,它通过命令行参数接受输入.我从命令行输入两个数字和一个运算符.为了将两个数相乘,我必须提供输入,例如5 3 *,但它不是按照书面形式工作的.
为什么不接受*命令行?
redpath = os.path.realpath('.')
thispath = os.path.realpath(redpath)
fspec = glob.glob(redpath+'/*fits')
thispath = os.path.realpath(thispath+'/../../../..')
p = Path(thispath)
userinput = 'n'
while (userinput == 'n'):
text_file = next(p.glob('**/*.fits'))
print("Is this the correct file path?")
print(text_file)
userinput = input("y or n")
parent_dir = text_file.parent.resolve()
fspec = glob.glob(parent_dir+'/*fits')
Run Code Online (Sandbox Code Playgroud)
我收到错误
unsupported operand type(s) for +: 'WindowsPath' and 'str'
Run Code Online (Sandbox Code Playgroud)
我认为这是因为当我需要 glob 一个字符串时,我试图 glob 一个 Windows 文件路径。有没有一种方法可以将 WindowsPath 转换为字符串,以便我可以将所有文件合并到一个列表中?