Один из способов сделать это в Linux — передать данные с помощью временного файла(<<<
иногда используется временный файл ).
{
output=$(cmd1 | cmd2 | cmd3; printf '%s\n' "${PIPESTATUS[@]}" > /dev/fd/3)
readarray -t cmdsubst_pipe_status <&3
} 3<<< ''
printf '%s\n' "cmd1's status: ${cmdsubst_pipe_status[0]}"
Чтобы подтвердить существующее дерево, сделайте что-то вроде этого-
# find. -type d -depth 3 -print | grep -E '20\d+' | sort
./2006/autumn/Course101
./2006/autumn/Course102
./2006/autumn/CourseA103
./2006/fall/Course101
./2006/fall/Course102
./2006/fall/CourseA103
./2006/spring/Course101
./2006/spring/Course102
./2006/spring/CourseA103
./2006/summer/Course101
./2006/summer/Course102
./2006/summer/CourseA103
./2007/autumn/Course101
./2007/autumn/Course102
Затем используйте такой скрипт
#!/bin/sh
# Takes source directories as input and copies everything to the destination
#!/bin/sh
makeNewStructure() {
while read line; do
newdir=$( echo "$line" |sed -e 's#^\./#/#' -e 's#\(/[^/]*\)\(/[^/]*\)\(/[^/]*\)$#.\3\1\2#' )
mkdir -p "$newdir"
cp -r "$line"/* "$newdir"
done
}
find. -type d -depth 3 -print | grep -E '/20\d+/' | sort | makeNewStructure
Это не -деструктивное -оно не повлияет на первоначальную структуру.