相关疑难解决方法(0)

如何在sh中使用'find'的'-prune'选项?

我不太明白"男人发现"给出的例子,有人能给我一些例子和解释吗?我可以在其中组合正则表达式吗?


更详细的问题是这样的:写一个shell脚本,changeall,它有一个像"changeall [-r | -R]"string1""string2"这样的接口.它将找到后缀为.h,.C的所有文件,.cc或.cpp并将所有出现的"string1"更改为"string2".- r是仅保留当前目录或包含subdir的选项.注意:1)对于非递归情况,不允许"ls" ,我们只能使用'find'和'sed'.2)我试过'find -depth'但它不受支持.这就是为什么我想知道'-prune'是否可以帮助,但是不明白'男人发现'.


EDIT2:我正在做作业,我没有详细提问,因为我想自己完成.既然我已经完成并把它交给我,现在我可以陈述整个问题.此外,我设法在不使用-prune的情况下完成了作业,但无论如何都想学习它.

regex shell find manual

207
推荐指数
5
解决办法
11万
查看次数

如何获取shell脚本中目录中的文件列表?

我正在尝试使用shell脚本获取目录的内容.

我的脚本是:

for entry in `ls $search_dir`; do
    echo $entry
done
Run Code Online (Sandbox Code Playgroud)

哪里$search_dir是相对路径.但是,它$search_dir包含许多名称中带有空格的文件.在这种情况下,此脚本不会按预期运行.

我知道我可以使用for entry in *,但这只适用于我当前的目录.

我知道我可以更改到该目录,for entry in *然后使用然后更改回来,但我的特殊情况阻止我这样做.

我有两个相对路径$search_dir$work_dir,和我有两个同时工作,阅读他们创建/删除在他们的文件等.

那我现在该怎么办?

PS:我用bash.

bash shell directory-listing

134
推荐指数
7
解决办法
44万
查看次数

查找目录中的文件夹,而不列出父目录

列出我不在的文件夹的内容时遇到问题,同时排除实际的文件夹名称本身.

例如:

root@vps [~]# find ~/test -type d
/root/test
/root/test/test1
Run Code Online (Sandbox Code Playgroud)

但是我希望它只显示/ test1,作为示例.

思考?

linux bash find

18
推荐指数
2
解决办法
2万
查看次数

如何逃避历史扩展感叹号!在一个双引号"命令替换,如"$(echo'!b')"?

编辑:命令替换对于令人惊讶的行为不是必需的,尽管它是最常见的用例.同样的问题适用于echo "'!b'"

b=a

# Enable history substitution.
# This option is on by default on interactive shells.
set -H

echo '!b'
# Output: '!b'
# OK. Escaped by single quotes.

echo $(echo '!b')
# Output: '!b'
# OK. Escaped by single quotes.

echo "$(echo '$b')"
# Output: '$b'
# OK. Escaped by single quotes.

echo "$(echo '!b')"
# Output: history expands
# BAD!! WHY??
Run Code Online (Sandbox Code Playgroud)
  • 在最后一个例子中,逃脱的最佳方法是!什么?
  • 即使我使用单引号,为什么它没有逃脱echo "$(echo '$b')"呢?!和之间有什么区别$
  • 为什么echo $(echo …

syntax bash quotes

16
推荐指数
1
解决办法
5171
查看次数

击.删除所有文件和目录,但删除某些文件

我正在编写一个脚本,需要从目录中删除所有内容,除了两个目录,mysql和temp.

我试过这个:

ls * | grep -v mysql | grep -v temp | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

但这也保留了所有名称中包含mysql的文件,我不需要.它也不会删除任何其他目录.

有任何想法吗?

directory bash ubuntu file

11
推荐指数
2
解决办法
1万
查看次数

如何在“find”命令中排除 CWD

如何使用 find 排除当前工作目录 (CWD)?

考虑我当前的工作目录包含以下目录 ( ls .):

a b c d e f g
Run Code Online (Sandbox Code Playgroud)

查找命令:find . -maxDepth 1 -type d将返回:

.
./a
./b
./c
./d
./e
./f
./g
Run Code Online (Sandbox Code Playgroud)

我尝试了这里的答案(如何在 find .command 中排除目录):find . -maxdepth 1 -type d -path . -prune -false

虽然我可以使用,但ls我很好奇如何使用find.

因此命令的预期输出find应该类似于以下ls .输出:

./a
./b
./c
./d
./e
./f
./g
Run Code Online (Sandbox Code Playgroud)

bash

1
推荐指数
1
解决办法
160
查看次数

标签 统计

bash ×5

find ×2

shell ×2

directory ×1

directory-listing ×1

file ×1

linux ×1

manual ×1

quotes ×1

regex ×1

syntax ×1

ubuntu ×1