linux根据最近修改的文件创建符号链接

时间:2012-02-17 12:41:28

标签: linux command-line symlink

我想以递归方式搜索目录树并获取最近修改的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中为每个文件创建一个符号链接,而不使用脚本语言?

3 个答案:

答案 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

这将在您的主目录中创建文件recent0recent9,这些文件是最新文件的符号链接。

显然,您应该将实际命令放在上面标记文本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的快捷方式,以获得您想要的最新文件!