相关疑难解决方法(0)

为什么循环查找的输出是不好的做法?

这个问题的灵感来自

为什么使用 shell 循环处理文本被认为是不好的做法?

我看到这些结构

for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)

for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)

几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:

为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?

find filenames files for

193
推荐指数
4
解决办法
3万
查看次数

默认情况下通过 ACL 为新目录设置粘滞位?

我想设置一个目录,其中所有新文件和目录都具有特定的访问掩码,并且目录还设置了粘滞位(t限制删除这些目录中的文件的那个)。

对于第一部分,我的理解是我需要为父目录设置默认ACL。但是,新目录不会t从父目录继承该位。因此,非所有者可以删除子目录中的文件。我能解决这个问题吗?

linux acl permissions

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

从 Find "-exec" 调用时,流水线 Sed 在 Bash 命令替换中对找到的文件名不起作用

在某些情况下,'find'、'bash' 和 'sed' 看起来不像人们预期的那样工作。

下面的例子应该首先创建文件'sample.txt',然后找到该文件,最后通过'-exec'命令处理它。执行的命令打印找到的文件名、测试样本和修改后的文件名。'sed' 命令本身用于将 'txt' 替换为 'TXT'。

touch sample.txt
find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") \;
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

./sample.txt Specimen_before.TXT ./sample.TXT Specimen_after.TXT

相反,它产生:

./sample.txt Specimen_before.TXT ./sample.txt Specimen_after.TXT

(该示例还通过反引号 '`' 使用老式命令替换进行了测试,结果相同)

我究竟做错了什么?

bash pipe sed command-substitution

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

标签 统计

acl ×1

bash ×1

command-substitution ×1

filenames ×1

files ×1

find ×1

for ×1

linux ×1

permissions ×1

pipe ×1

sed ×1