我的目录结构如下:
+ /root
+ a
+ 1/1/2016.csv
+ 1/2/2016.csv
+ 12/31/2017.csv
+ b
+ 1/1/2016.csv
+ 1/2/2016.csv
+ 12/31/2017.csv
+ c
+ 1/1/2016.csv
+ 1/2/2016.csv
+ 12/31/2017.csv
等等。
我想将它们切换为:
+ root
+ 1/1/2016
+ a.csv
+ b.csv
+ c.csv
+ 1/2/2016
+ a.csv
+ b.csv
+ c.csv
所有目录将具有相同数量的文件,因此它的m x n目录结构,我想将其切换到n x m目录结构。
在伪代码中:
For each file_name in a: # since all directories have same file_names
initialize file_name_without_csv
create_directory, file_name_without_csv, without csv
for each directory in root:
new_file_name = directory + ".csv"
move root/directory/file_name to root/file_name_without_csv/new_file_name
是否有一些简单的方法可以做到这一点,或者只是编写一些python代码来执行此操作?
我知道我实际上只是编写代码来执行此操作,但我认为可能有正式的方法来执行此操作。有点像目录结构的转置。
答案 0 :(得分:0)
这样做你想要的吗?
它使用ln来避免不必要的复制。如果您想要安全起见,请在“测试”结束时删除rm -rf。首先自己检查和rm(我推荐)。我在那里留下一些回声以便于评估。
#setup test env
testenv(){
mkdir swaptest
cd swaptest
mkdir {a,b,c}
touch {a,b,c}/{1_1_2016.csv,1_2_2016.csv,12_31_2017.csv}
}
swap(){
for d in $(find . * -type d -depth 1); do
echo "dir $d"
for f in $(find "$d" -type f -depth 1); do
echo "file $f"
filename=$(basename "$f")
filename_strip=${filename%.*}
filename_ext=${filename##*.}
if [[ ! -d "$filename_strip" ]]; then
mkdir "$filename_strip"
fi
echo "filename $filename"
echo "filename_strip $filename_strip"
ln "$f" "$filename_strip"/$(basename "$d")."$filename_ext"
done
rm -rf "$d"
done
}