我有以下文件夹结构。
Service
|
-- App1
|
--- bin
|
--- file1
|
--- file2
|
--App2
|
--- bin
|
--- file1
|
--- file2
|
--- file3
|
--App3
|
--- bin
|
--- file1
|
--- file2
我希望仅将文件从 App 文件夹的根移动到相应的 bin 文件夹,同时保留 GIT 历史记录。所以最终结果应该是:
Service
|
-- App1
|
--- bin
|
--- file1
|
--- file2
|
--App2
|
--- bin
|
--- file1
|
--- file2
|
--- file3
|
--App3
|
--- bin
|
--- file1
|
--- file2
我尝试了以下...
#!/bin/bash
dir1="/c/Service"
subs=`ls $dir1`
for i in $subs; do
git mv $dir1/$i/* $dir1/$i/bin/
done
...但看到以下错误:
致命:无法将目录移动到其自身中
致命:无效路径“/c”:没有这样的文件或目录
任何帮助表示赞赏。
答案1
从目录的父目录中Service
,您可以执行以下操作:
$ for file in Service/*/*; do
if [[ -f "$file" ]]; then
echo mv "$file" "$(dirname -- "$file")/bin"
fi
done
mv Service/App1/file1 Service/App1/bin
mv Service/App1/file2 Service/App1/bin
mv Service/App2/file1 Service/App2/bin
mv Service/App2/file2 Service/App2/bin
mv Service/App2/file3 Service/App2/bin
mv Service/App3/file1 Service/App3/bin
mv Service/App3/file2 Service/App3/bin
如果看起来正确,请删除echo
并再次运行它以实际移动文件。
请注意,上述方法将保存git 历史记录,根据要求。如果您不想保留它,而是想将这些命令添加到 git 的历史记录中,只需使用git mv
而不是mv
:
for file in Service/*/*; do
if [[ -f "$file" ]]; then
echo git mv "$file" "$(dirname -- "$file")/bin"
fi
done