如何递归计算Linux目录中的文件?
我找到了这个:
find DIR_NAME -type f ¦ wc -l
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它返回以下错误.
find:paths必须在表达式之前:|
我需要循环一些值,
for i in $(seq $first $last)
do
does something here
done
Run Code Online (Sandbox Code Playgroud)
对于$first和$last,我需要它是固定长度5.所以如果输入是1,我需要在前面添加零,使它成为00001.它循环直到99999例如,但长度必须是5.
如:00002,00042,00212,012312等等.
关于我如何做到这一点的任何想法?
我有一个大约1,700个文件的文件夹.它们都被命名为1.txt或1497.txt等.我想重命名所有文件,以便所有文件名都是四位数.
即,23.txt成为0023.txt.
什么是shell脚本才能执行此操作?或者一个相关的问题:我如何使用grep只匹配包含的行\d.txt(即一个数字,然后一个句点,然后是字母txt)?
这是我到目前为止所拥有的:
for a in [command i need help with]
do
mv $a 000$a
done
Run Code Online (Sandbox Code Playgroud)
基本上,运行三次,使用命令找到一位数,两位数和三位数文件名(初始零的数量已更改).
我有一堆像这样命名的文件:
output_1.png
output_2.png
...
output_10.png
...
output_120.png
Run Code Online (Sandbox Code Playgroud)
重命名那些匹配约定的最简单方法是什么,例如最多四位小数,以便命名文件:
output_0001.png
output_0002.png
...
output_0010.png
output_0120.png
Run Code Online (Sandbox Code Playgroud)
这在Unix/Linux/BSD中应该很容易,尽管我也可以访问Windows.任何语言都可以,但我对一些非常简洁的单行(如果有的话)感兴趣.
我正在使用该实用程序rename来自的 GNU/Linux 发行版,util-linux我想充分利用它的正则(Perl 或 POSIX)表达式。
rename 's/^fgh/jkl/' fgh*util-linux版本中,与语法rename fgh jkl fgh*如果第一个正则表达式的使用似乎很明显,我无法轻松访问它。但是,我对第二个感到困惑:我找不到有关可能使用的任何相关文档或示例,在这种情况下,找不到要使用的正则表达式的格式。
让我们举一个简单的例子,一个包含以下内容的目录:
foo_a1.ext
foo_a32.ext
foo_c18.ext
foo_h12.ext
Run Code Online (Sandbox Code Playgroud)
我想使用类似这两行之一的语法:
rename "foo_[a-z]([0-9]{1,2}).ext" "foo_\1.ext" *
rename "foo_[:alpha:]([:digit:]{1,2}).ext" "foo_\1.ext" *
Run Code Online (Sandbox Code Playgroud)
预期输出为:
foo_1.ext
foo_32.ext
foo_18.ext
foo_12.ext
Run Code Online (Sandbox Code Playgroud)
这当然行不通!要么我遗漏了一些明显的东西,要么没有实现的方法可以在这个工具中使用实际的正则表达式。
(请注意,我知道在 shell 解释器中使用正则表达式重命名文件的其他可能性;这个问题针对该rename工具的特定版本。)
bash ×3
linux ×3
batch-file ×1
batch-rename ×1
grep ×1
numbers ×1
padding ×1
regex ×1
rename ×1
shell ×1