Unix shell命令,用于将* .bat以外的所有文件移动到其他文件夹。
此处在单个文件夹中存在许多文件,只需要保留* .bat文件,所有需要移动到不同的文件夹。它在窗口中工作正常但是我试图将其转换为unix shell命令但是没有用。
类似下面的Batch命令:
pushd "c:\folder_with_bat_files"
for /f "tokens=* delims=" %%a in ('dir /b /a:-d^| findstr /i /e /v "bat"') do (
move /y "%%~fa" "c:\some_dir"
答案 0 :(得分:3)
如果你的shell支持它并且你想移动不是.bat
文件的一切,包括目录,我建议使用扩展的globs:
#!/bin/bash
shopt -s extglob
mv path/to/bats/!(*.bat) some_dir
!(*.bat)
扩展到所有路径,但以.bat
结尾的路径除外。
如果您只想移动文件,则可以使用find
:
find path/to/bats -type f ! -name '*.bat' -exec mv '{}' some_dir \;
您应该知道这也会移动子目录中的文件。要避免此行为,如果您的-maxdepth 1
版本支持此参数,则可以使用find
参数。
否则,你会陷入一个循环:
for f in path/to/bats/*; do
if [ -f "$f" ]; then
case $f in
*.bat)
;;
*)
mv "$f" some_dir
;;
esac
fi
done
答案 1 :(得分:0)
您可以使用以下命令:
ls -ltr | grep -v "bat$" | sed 1d | awk -F ' ' '{print "mv " $9 " /new_dir/"}' |sh
在没有sh
的情况下运行以上命令,以查看是否正确生成了移动命令。