我在这样的结构中有很多文件。文件夹中有.py
个文件,名称为std01
... std60
/std01 (directory)
problem1.py
problem2.py
problem3.py
/std02 (directory)
problem1.py
problem2.py
problem3.py
通过使用bash
命令,我可以移动和重命名这些文件,以便按文件名在文件夹中,以std
文件夹名称引导吗?
/problem1.py (directory)
std01_problem1.py
std02_problem1.py
...
/problem2.py (directory)
std01_problem2.py
std02_problem2.py
...
答案 0 :(得分:3)
for std in *; do
for problem in "$std"/*; do
problem=${std##*/} # trim directory name
mkdir -p "$problem" # create dir if it doesn't already exist
mv "$std/$problem" "$problem/$std_$problem"
done
rmdir "$std" # if original directory is empty, remove it
done
答案 1 :(得分:0)
find
+ bash
解决方案:
在:
$ tree std*
std01
├── problem1.py
├── problem2.py
└── problem3.py
std02
├── problem1.py
├── problem2.py
└── problem3.py
find . -type f -path "*std[0-9]*/problem[0-9]*.py" -exec bash -c \
'IFS=/ read -ra a <<<"$1"; mkdir -p "${a[-1]}"; mv "$1" "${a[-1]}/${a[-2]}_${a[-1]}"' _ {} \;
后:
$ tree problem*
problem1.py
├── std01_problem1.py
└── std02_problem1.py
problem2.py
├── std01_problem2.py
└── std02_problem2.py
problem3.py
├── std01_problem3.py
└── std02_problem3.py