采取2个论点,来源&目的地并删除除txt之外的所有文件。 。我只是学习bash,所以没有使用/意识到不同的功能等...
mkdir $2
cp -R $1/* $2
for file in $1/*;do #all files in testInput
if [ -d "$file" ] #if its a file then look at the contents of it
then
for inDir in $file/*; do
if [ -d "$inDir" ]
then
for line in $inDir ; do
if [ line != *.txt ]
then
rm line
fi
done
fi
done
else
for files in file; do
if [ files != *.txt ]
then
rm files
fi
done
fi
done
source是一个包含3个文件夹的文件夹,其中一些子文件夹包含一个子文件夹和文件
答案 0 :(得分:1)
获取目录$ 1中除* .txt文件以外的所有文件,并将它们移动到目录$ 2。
find "$1" -type f ! -name "*.txt" -exec mv -v "{}" "$2" \;
一如既往,小心这一点......
编辑围绕变量添加引号
edit2 引用文件名占位符,将调试输出添加到mv
答案 1 :(得分:1)
您应该使用find
来执行此类任务。这是一个例子:
find "$dir" -type f ! -name "*.txt" -exec rm {} \;
否则:
if [ line != *.txt ] # ... if [ files != *.txt ]
您在变量名称之前缺少$
并且测试不正确。你可以尝试这样的事情:
[[ $line =~ \.txt$ ]] || rm line
此外:
for files in file; do
您在变量名称前缺少字符$
,您应该使用类似的内容:
for files in "$file"/*; do
最后,您无法正确保护变量。阅读:bash : Illegal number