【问题标题】:Bash script to loop through directories and remove some content用于遍历目录并删除一些内容的 Bash 脚本
【发布时间】:2019-09-22 19:14:53
【问题描述】:

我正在尝试编写一个 bash 脚本,该脚本将遍历包含其他一些目录的目录,删除其中的大部分及其内容,在一种情况下,删除其中的所有文件和目录,除了最近的文件和目录修改日期。这是目录结构:

> 0001_Job_X
    > fonts
    > images
    > MS Documents
    > Design Files
    > Web Files

> 0002_Job_Y
    > fonts
    > images
    > MS Documents
    > Design Files
    > Web Files

等等...(有很多)。我的目标是删除字体、MS 文档和 Web 文件,理想情况下,删除设计文件的所有内容,除了一个具有最近修改日期的文件。

这是我目前编写的脚本:

for d in ./*; do
cd "$d"
rm -rf ./fonts
rm -rf ./MS\ Documents
rm -rf ./Web\ Files
cd ..
done

这可行,但我不知道如何删除设计文件的所有内容,除了具有最近修改日期的一个文件。有人可以帮我吗?谢谢!

【问题讨论】:

  • 是否保证设计文件中只有文件?我的意思是里面没有目录,对吧?
  • 那里可能有一些目录,但我只对保留一个始终位于设计文件目录顶层的文件感兴趣。那里的所有目录都可以删​​除,无需检查。

标签: bash shell console


【解决方案1】:

下面的sn-p会在一个文件夹(Design Files)中查找最新的文件——忽略子文件夹,并删除所有其他文件。

FOLDER='Design Files'
    # Name of latest "real" file - exclude folders
FILES=$(find $FOLDER -maxdepth 1 -type f)
    # Find the last modified
LATEST=$(ls -t $FILES)
    # Find all files other than last modified
OLDER_FILES=$(ls $FILES | grep -v "^$LATEST$")
rm -f $OLDER_FILES

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2016-05-27
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多