![如何使用触摸命令更改 USB 驱动器上所有文件夹的创建/修改日期?](https://linux22.com/image/820744/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%A7%A6%E6%91%B8%E5%91%BD%E4%BB%A4%E6%9B%B4%E6%94%B9%20USB%20%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%8A%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E5%88%9B%E5%BB%BA%2F%E4%BF%AE%E6%94%B9%E6%97%A5%E6%9C%9F%EF%BC%9F.png)
我有一个 USB 驱动器,里面有 mp3 音乐,我会在车上播放。我的车有一个 USB 驱动器端口。问题是汽车按创建/修改日期(而不是按字母顺序)对音乐进行排序。这让我很难找到我想要的艺术家。
为了解决这个问题,我需要一种方法来在每次将新的音乐文件夹添加到 USB 驱动器时“更新”USB 驱动器上所有文件夹的创建/修改日期。有人知道我该怎么做吗?
Touch 命令效果很好,但格式化touch <filename>
驱动器上每个文件夹需要很长时间。有没有办法选择驱动器上的所有文件夹然后touch <all folders>
?
在我的 USB 驱动器上,每个专辑都有一个文件夹,每个文件夹中都有相应的歌曲,如下所示:专辑 1 文件夹专辑 2 文件夹
我需要将 Touch 命令应用到驱动器上的每个“相册”文件夹。
我偶然发现了一个解决此问题的简单方法:touch /media/USB_Drive/*
答案1
如果您有很多文件需要处理,那么这需要一段时间。您可以插入驱动器,然后在终端中(假设您的驱动器已安装为)/media/USB_DISK
,执行以下操作:
for i in `find /media/USB_DISK -type d|sed -e 's/ /%20/g'|sort`; do
echo $i|sed -e 's/%20/\\ /g'|xargs touch
done
只需将其替换USB_DISK
为目录下安装驱动器的文件夹的正确名称即可/media/
。
答案2
即使你让这个方法奏效,所有文件的日期也会相同。这听起来没什么用。
有效的方法是使用具有硬编码文件名的脚本。硬编码文件名是创建首选顺序所必需的。只需按首选顺序“触摸”它们即可“创建”您的顺序,因此您无需在 touch 命令中输入实际日期。
#!/bin/bash
cd /path/to/folder1
touch file1
sleep 1
touch file4
sleep 1
touch file2
sleep 1
touch "file 5 with spaces"
cd /path/to/folder2
touch file9
sleep 1
touch file3
sleep 1
需要使用“sleep”命令来强制每个“触摸”具有不同的时间。请注意,文件“编号”无关紧要,并且按数字顺序进行处理。但是,脚本中的顺序会创建“处理”顺序。
请注意,每次添加新歌曲/文件时,您都需要更新并运行脚本。
编辑:我刚刚看到了“排序查找”帖子。这可能会更好。:)
答案3
Dobey 的答案是正确的,但如果任何目录名包含空格,它就会失败。通常,find
在脚本中使用 的输出不是一个好主意,原因与 的输出ls
不应由脚本解析的原因相同:文件名很容易包含字符,这使得脚本难以或无法准确解释。
这里有几种选择。一种是使用-print0
开关结合find
适当的调用xargs
。有关详细信息,请参阅相应man
页面。
我推荐的方法对于当前的具体问题来说更简单,并使用 shell globing 来获取准确的文件名:
for i in /media/USB_Drive/*; do
[[ -d "$i" ]] || continue # skip non-directories
echo "touching $i..."
touch "$i"
done
请注意,使用 glob 会自动生成按字母顺序排列的列表。