#linux #shell #unix
#linux #оболочка #unix
Вопрос:
У меня есть папки, как показано ниже. Я хочу создать подкаталог с тем же именем и переместить только несколько файлов в подкаталог
Ввод
Parent
folder1/a.txt
folder1/b.txt
folder2/a.txt
folder2/b.txt
folder3/a.txt
folder3/b.txt
Output
Parent
folder1/folder1/a.txt
folder1/b.txt
folder2/folder2/a.txt
folder2/b.txt
folder3/folder3/a.txt
folder3/b.txt
Я пробовал это, но это работает только для файлов, а не для папок
for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done
Комментарии:
1. Можете ли вы уточнить? Вопрос помечен как linux, но ссылка в вопросе предназначена для batch.
2. Синтаксис в связанном вопросе предназначен для Microsoft Windows, а не для Linux.
3. Извините за путаницу, я ищу решение для Linux
Ответ №1:
Если ваша оболочка — bash, вы можете запустить следующее:
for file in */a.txt ; do
dir=${file%/a.txt}
mkdir "$dir/$dir"
mv "$file" "$dir/$dir"
done
Он использует расширение параметра для удаления /a.txt
из имени файла, в котором остается только имя каталога $dir
.
Комментарии:
1. Спасибо.. Будет ли это работать, если у меня есть несколько файлов, заканчивающихся на *a.txt это должно быть перемещено во вложенные папки?
2. Не без изменений.