我想以递归方式搜索目录树并获取最近修改的10个文件。
对于这些文件中的每一个,我想在我的/home/mostrecent/
目录中创建一个符号链接。
我知道我可以使用脚本语言来解决这个问题,但我有点恼火,我不能用linux命令来做这件事!
到目前为止我有这个:
find /home/myfiles -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort | tail -n 10 | cut -c 32-
如何在/home/mostrecent
中为每个文件创建一个符号链接,而不使用脚本语言?
答案 0 :(得分:2)
实际上,bash
是一种脚本语言,甚至可以从命令行执行此类操作: - )
假设您发布的命令有效(而且似乎是基于我的粗略测试),您可以这样做:
i=0
for f in $(CMD) ; do
ln -s $f $HOME/recent$i
((i++))
done
或者,作为一个单行:
i=0;for f in $(CMD);do ln -s $f $HOME/recent$i;((i++));done
这将在您的主目录中创建文件recent0
到recent9
,这些文件是最新文件的符号链接。
显然,您应该将实际命令放在上面标记文本CMD
的位置。我已经使用了标记,因此它在SO上很好地格式化。
Jan Hudec在评论中指出,这只适用于没有空格的文件,我认为是邪恶的东西: - )
但是,由于人们似乎使用它们,你可以使用更安全的:
i=0
CMD | while read f; do
ln -s $f $HOME/recent$i
((i++))
done
而且,单行版本:
i=0;CMD|while read f;do ln -s $f $HOME/recent$i;((i++));done
答案 1 :(得分:0)
我用sed解决了这个问题。
所有冰雹sed!
find /home/myfiles/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort | tail -n 10 | cut -c 21- | sed -e "s/^/ln -s \"/" -e "s/$/\"/" -e "s/$/ \"\/home\recent\/\"/" | sh
如果我将sed
传递给cat
而不是sh
,则输出结果为:
ln -s "/home/myfiles/1.simplest" "/home/recent/"
ln -s "/home/myfiles/2.with space" "/home/recent/"
ln -s "/home/myfiles/3.with'apostraphe" "/home/recent/"
ln -s "/home/myfiles/4.with'apostrophe space" "/home/recent/"
感谢您的帮助。
答案 2 :(得分:0)
为过去24小时内修改过的几种文件类型创建符号链接,文件名相同(当然路径不同)
感谢Pax,Jan和Jon,稍加修改......
制作一个'最近'目录
mkdir ~/recent
创建' getrecentfiles.sh'并添加......
#!/usr/bin/bash
find $HOME -mtime 0 -name \*.txt -print -o \
-mtime 0 -name \*.pdf -print -o \
-mtime 0 -name \*.extensionname -print -o | while read f; do
ln -s $f $HOME/recent/
done
过滤器:
-mtime(n * 24hrs)是自上次修改以来的时间(n = 1仅显示24-48小时前修改过的文件)
-o是多个文件的OR运算符(默认为AND)
将其更改为可执行文件,将其添加到启动脚本中,并在桌面上创建〜/ recent的快捷方式,以获得您想要的最新文件!