如何使用触摸命令更改 USB 驱动器上所有文件夹的创建/修改日期?

如何使用触摸命令更改 USB 驱动器上所有文件夹的创建/修改日期?

我有一个 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 会自动生成按字母顺序排列的列表。

相关内容