我想编写一个shell脚本,它将遍历文件夹中的所有文件并回显“put $ {filename}”。有人能指出我正确的方向吗?
答案 0 :(得分:25)
对于文件和目录,不是递归的
for filename in *; do echo "put ${filename}"; done
仅限文件(不包括文件夹),不是递归
for file in *; do
if [ -f "$file" ]; then
echo "$file"
fi
done
对于递归解决方案,请参阅Bennet Yee的回答。
答案 1 :(得分:6)
递归,包括子目录中的文件?
find dir -type f -exec echo "put {}" \;
只有该目录中的文件?
find dir -maxdepth 1 -type f -exec echo "put {}" \;
答案 2 :(得分:6)
对于当前目录中的所有文件夹和文件
for file in *; do
echo "put $file"
done
或者,如果您只想包含子目录和文件:
find . -type f -exec echo put {} \;
如果您想自己包含文件夹,请取出-type f
部分。
答案 3 :(得分:2)
如果您没有任何文件,那么我们可以执行此操作,而不是打印*。
format=*.txt
for i in $format;
do
if [[ "$i" == "$format" ]]
then
echo "No Files"
else
echo "file name $i"
fi
done
答案 4 :(得分:1)
使用ls
和sed
的另一种选择:
$ ls -1 <dir> | sed -e 's/^/put /'
并使用ls
和xargs
:
$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'
答案 5 :(得分:0)
如果你有任何子目录和文件,这也会递归工作:
find . -type f|awk -F"/" '{print "put ",$NF}'