我正在检查shell脚本中'find'命令的替代方法,以消除子目录的访问日期的差异。
根据我的观察,当执行find命令列出目录中的所有文件时,子目录的访问日期会发生变化。
我想在其中一个垃圾平台上发布真正的统计数据,所以我一直在寻找一些论坛,并通过'ls'命令获得替代方案。但这并不能完全满足我的要求。
以下是@ghostdog74
给出的answer。
ls -R %path% | awk '/:$/&&f{s=$0;f=0} /:$/&&!f{sub(/:$/,"");s=$0;f=1;next} NF&&f{ print s"/"$0 }'.
但是这只找到子目录中的文件。我需要列出所有文件和子目录的文件。
例如:
bash-3.2# pwd
/Users/manojkapalavai/Desktop/SleepTimeReport
bash-3.2# ls
**6th floor** manoj17 manoj26.txt manoj36 manoj45.txt manoj55 manoj70.txt manoj80 manoj9.txt **test1**
manoj14 manoj23.txt manoj33 manoj42.txt manoj52 manoj61.txt manoj71 manoj80.txt manoj90 **test2**.
突出显示的是“SleepTimeReport”目录中的子目录,其余只是文件。所以,当我执行上面的命令时,我只得到以下输出。
bash-3.2# ls -R ~/Desktop/SleepTimeReport | awk '/:$/&&f{s=$0;f=0} /:$/&&!f{sub(/:$/,"");s=$0;f=1;next} NF&&f{ print s"/"$0 }'.
~/Desktop/SleepTimeReport/6th floor/Script to increase the Sleep Time.numbers.
~/Desktop/SleepTimeReport/6th floor/Zone1Sleep.pages.
~/Desktop/SleepTimeReport/test1/New_folder.
~/Desktop/SleepTimeReport/test1/manoj.txt.
~/Desktop/SleepTimeReport/test1/sathish.txt.
~/Desktop/SleepTimeReport/test1/vara.txt.
~/Desktop/SleepTimeReport/test1/New_folder/Script to increase the Sleep Time.numbers.
~/Desktop/SleepTimeReport/test1/New_folder/Zone1Sleep.pages.
即;只列出子目录中的那些文件。
简要说明我面临的问题,请参阅下文
Manojs-MacBook-Pro:SleepTimeReport manojkapalavai$ ls -l
total 16
drwxr-xr-x 8 manojkapalavai staff 272 Sep 14 15:07 6th floor
-rwxr-xr-x 1 manojkapalavai staff 59 Nov 13 10:41 AltrFind.sh
-rw-r--r-- 1 manojkapalavai staff 0 Nov 2 15:15 manoj%.txt
-rw-r--r-- 1 manojkapalavai staff 0 Nov 2 18:23 manoj1
当我在使用'find'命令之前尝试查找文件夹 6楼的创建时间和访问时间时,输出以下内容。
Manojs-MacBook-Pro:SleepTimeReport manojkapalavai$ stat -f '%N, %SB, %Sa' 6th\ floor/
6th floor/, Sep 13 10:34:55 2017, **Nov 13 11:21:33 2017**
Manojs-MacBook-Pro:SleepTimeReport manojkapalavai$ find /Users/manojkapalavai/Desktop/SleepTimeReport/
/Users/manojkapalavai/Desktop/SleepTimeReport/
/Users/manojkapalavai/Desktop/SleepTimeReport//6th floor
/Users/manojkapalavai/Desktop/SleepTimeReport//6th floor/.DS_Store
/Users/manojkapalavai/Desktop/SleepTimeReport//6th floor/Script to increase the Sleep Time.numbers
/Users/manojkapalavai/Desktop/SleepTimeReport//6th floor/Zone1Sleep.pages
现在,找到目录中的所有文件后,下面是atime的输出。你可以注意到这个变化
Manojs-MacBook-Pro:SleepTimeReport manojkapalavai$ stat -f '%N, %SB, %Sa' 6th\ floor/
6th floor/, Sep 13 10:34:55 2017, **Nov 13 14:26:03 2017**
我所做的只是找到文件,当我们发现文件夹中的子文件夹的时间变为当前时间时。
有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
ls
the wrong tool用于程序化使用。一般来说,你应该能够修复你的find
用法,使其在一段时间内没有影响(事实上,在现代生产系统中,即使在文件系统级别启用了 ,人们也很少见! ),但如果你真的想避免它,请考虑bash globstar
选项:
shopt -s globstar
for file in **/*; do
echo "Doing whatever with $file"
done