将所有内容移动到新的子文件夹

时间:2019-05-14 14:58:55

标签: linux shell

我有一个用于Linux的Shell脚本,该脚本位于基本级别的文件夹testing中,并将进入original目录,将所有内容复制到input文件夹中,然后在每个文件夹中input中的子目录执行三个任务:

  1. 创建一个名为tip的新文件夹
  2. 将其中的所有文件放入tip
  3. 创建另一个名为sorted的新文件夹

当我在命令行上对其进行测试时,我得到的唯一问题是,由于我在将所有内容移动到其中之前都创建了tip文件夹,因此它弹回了一个错误,提示它无法在其内部移动文件夹-随便吧。但是,当我在NiFi中运行它时,它给了我一个不同的错误(cannot create directory tip: file exists),并且表现不同。

脚本

#!/bin/bash

# copy to input while maintaining file structure
cd /data/testing/original
cp -r * /data/testing/input
cd /data/testing/input

# for each subfolder in input, create tip & sorted, and move all of the original stuff into tip
for dir in /data/testing/input/*
do
  test -d "$dir" || continue
  cd "$dir" && mkdir tip && mv * tip/
  mkdir sorted
done

每个子文件夹中的预期输出 /data/testing/input/subfolder/

sorted -> empty
tip -> media folder, file1, file2

实际输出

sorted -> empty
tip -> media folder, file1, file2
media folder
file1
file2

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

shopt -s extglob 

# trailing slash forces the results to be dirs
# ..............................v
for dir in /data/testing/input/*/; do 
  (
    cd "$dir" && mkdir tip sorted && mv -t tip/ !(tip|sorted)
    # ..........................................^^^^^^^^^^^^^
    #               anything *not* matching "tip" or "sorted"
  )
  # run above in a subshell so you don't have to cd back to parent dir
done