Unix shell命令,用于将* .bat以外的所有文件移动到其他文件夹

时间:2015-05-08 14:16:36

标签: shell unix

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"

2 个答案:

答案 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的情况下运行以上命令,以查看是否正确生成了移动命令。