首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >readlink -f不像预期的那样工作

readlink -f不像预期的那样工作
EN

Unix & Linux用户
提问于 2018-04-07 18:50:46
回答 3查看 1.4K关注 0票数 0

这是我写的一个练习剧本。它应该递归地查找当前目录的子树中的所有常规文件,并将上次修改日期更改为昨天日期。

代码语言:javascript
复制
#!/bin/bash                                                
YESTERDAY=$(date -d yesterday)                             

RFILES=$(ls -lR | egrep '^-' | rev | cut -d" " -f1 | rev)  

for i in $RFILES ; do                                      
   ABSPATH=$(readlink -f $i)                               
   touch "$ABSPATH" -d "$YESTERDAY"                       
done                                                       

如果我在一个目录中调用它,其子树如下所示:

代码语言:javascript
复制
a  
|___ b  
|    |__ file1  
|    |__ file2
|    
|__ file3  
|__ file4  

readlink不像预期的那样工作。我的意思是它告诉我file1file2a目录中。因此,当我使用touch更改他们上一次修改日期时,它会在a目录中创建另外两个file1file2,日期为昨天。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-04-07 19:13:36

首先,命令ls -lR | egrep '^-' | rev | cut -d" " -f1 | rev只显示没有路径的文件名。如果需要获取带有路径的所有文件,则可以使用find ./ -type f并解析该输出。因此,不需要readlink -f $i命令。

其次,如果您需要更有效的解决方案,则只需要带有find参数的exec命令:

代码语言:javascript
复制
find . -type f -exec touch -d "$YESTERDAY" {} +

-type f       find regular files
票数 2
EN

Unix & Linux用户

发布于 2018-04-07 19:18:02

readlink程序用于读取符号链接的位置,如果您只有常规文件,则可能有更好的工作工具。为了查找文件,我喜欢使用find命令。似乎您可以使用find一步完成整个练习:

代码语言:javascript
复制
find . -type f -exec touch {} -d "$(date -d yesterday)" \;
  • find .:搜索当前目录.,以及下面的所有内容
  • -type f:只搜索常规文件
  • -exec:告诉find为它找到的每个对象运行以下命令
  • touch {} -d "$(date -d yesterday)" \;:要对每个文件执行的命令。"{}“是find输出的占位符,\;指定-exec语句的结尾
票数 2
EN

Unix & Linux用户

发布于 2018-04-07 19:24:44

您的RFILES只是没有路径的文件名。readlink不是find,它使用您给它的名称,如果其中没有路径,则假设它们位于当前目录中。

现代的狂欢:

代码语言:javascript
复制
shopt -s globstar
RFILES=( ** )

但是您不需要readlink,您可以直接使用ls的输出。对于globstar,它非常简单:

代码语言:javascript
复制
touch -d "$YESTERDAY" $(ls -d **)

在实践中,您甚至不需要ls

代码语言:javascript
复制
touch -d "$YESTERDAY" **

否则,使用find

代码语言:javascript
复制
find . -type f -exec touch -d "$YESTERDAY" {} +

最后,touch的日期规范比您认为的更灵活:

代码语言:javascript
复制
touch -d yesterday **

会有用的..。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/436241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档