我需要遍历一个目录,所以从一个目录开始,然后深入到不同的子目录。但是,我还需要能够访问每个单独的文件来修改文件。是否已有命令执行此操作或是否必须编写脚本?有人可以提供一些代码来帮助我完成这项任务吗?感谢。
答案 0 :(得分:5)
find
命令只是其中的工具。其-exec标志或-print0与xargs -0
结合使用,可以对每个文件的操作进行细粒度控制。
示例:在/ tmp和子目录中的所有文件中用bar替换所有foo。
find /tmp -type f -exec sed -i -e 's/foo/bar/' '{}' ';'
答案 1 :(得分:2)
for i in `find` ; do
if [ -d $i ] ; then do something with a directory ; fi
if [ -f $i ] ; then do something with a file etc. ; fi
done
这将返回循环将通过的列表中当前目录中的整个树(递归)。
答案 2 :(得分:2)
这可以通过混合find
,xargs
,sed
(或其他文件修改命令)轻松实现。
例如:
$ find /path/to/base/dir -type f -name '*.properties' | xargs sed -ie '/^#/d'
这会过滤所有文件扩展名为.properties
的文件。
xargs
命令会将file path
命令生成的find
提供给sed
命令。
sed
命令会删除文件中以#
开头的所有行(xargs
提供)。
这种方式的命令组合非常灵活。
例如,find
命令具有不同的参数,因此您可以按用户名,文件大小,文件路径(例如:在/ test /子文件夹下),文件修改时间进行过滤。
灵活性的另一个方面是文件中的更改方式和内容。例如,sed
命令允许您在应用替换时对文件进行更改(通过正则表达式指定)。同样,您可以使用gzip
来压缩文件。等等...
答案 3 :(得分:1)
您通常会使用find
命令。在Linux上,您当然拥有GNU版本。它有许多额外的(和有用的)选项。两者都允许您在找到文件时对文件执行命令(例如shell脚本)。
如何更改文件的确切详细信息取决于您要对文件进行的更改。这可能是最好的脚本,find
运行脚本:
POSIX或GNU:
find . -type f -exec your_script '{}' +
这将为一组文件运行您的脚本,并将这些名称作为参数提供。如果您想一次只执行一个文件,请将+
替换为';'
(或\;
)。
答案 4 :(得分:0)
我假设SearchMe
是您需要完全遍历的示例目录名称
我也假设,因为没有指定,你要修改的文件都是文本文件。这是对的吗?
在这种情况下,我建议使用命令:
find SearchMe -type f -exec vi {} \;
如果您不熟悉vi
编辑器,请使用另一个(nano
,emacs
,kate
,kwrite
,gedit
等等。它应该也可以。
答案 5 :(得分:0)
Bash 4 +
shopt -s globstar
for file in **
do
if [ -f "$file" ];then
# do some processing to your file here
# where the find command can't do conveniently
fi
done