Ubuntu 16.04
即使 for 的输出client in */; do不会产生尾部斜杠,如果我在循环内对文件执行时间测试时回显变量 $client ,则会出现尾部斜杠。
cd "$wDir"
for client in */; do
cd "$wDir"/"$client";
#-- check to see if any .csv files exists
if ls *.csv &>/dev/null; then
for csvfile in *.csv; do
if test $(find "$csvfile" -mmin +2880); then
echo "$client has files older than 2 days ..." >> "staleFtpAccts"
fi
done
fi
done
Run Code Online (Sandbox Code Playgroud)
当我执行脚本时,一个 / 被放置在 $client 变量之后,如下所示:
root@me /home/frank # bash script.sh
Start ...
000029_000020/ has files older than 2 …Run Code Online (Sandbox Code Playgroud) 我只是想知道当我离开 / 在文件路径的末尾时会发生什么不同,例如:
root /var/www/website.com/
Run Code Online (Sandbox Code Playgroud)
并省略它,如:
root /var/www/website.com
Run Code Online (Sandbox Code Playgroud)
这是如何处理的或者有什么区别?
$ which mycommand
/home/t/program_files/document/other edits//mycommand
Run Code Online (Sandbox Code Playgroud)
为什么我//这里有双斜线?
目录名称之间是否有任何区别,例如
mydirectory
Run Code Online (Sandbox Code Playgroud)
和
mydirectory/
Run Code Online (Sandbox Code Playgroud)
我注意到当我ls在某些目录中执行时会发生这种情况- 有些目录名称有斜杠,有些没有。这是有问题的,因为如果我想访问目录中包含的文件,我可能需要在末尾添加一个斜杠:
vi $mydirectory"/"$myfile
Run Code Online (Sandbox Code Playgroud)
或者干脆做
vi $mydirectory$myfile
Run Code Online (Sandbox Code Playgroud) 我有本地文件结构:
/tmp/24
/dir1
/file1
/file2
/dir2
/file3
/file4
Run Code Online (Sandbox Code Playgroud)
我想将它上传到远程计算。当我使用
rsync /tmp/24 host:/target
Run Code Online (Sandbox Code Playgroud)
它target在远程主机 ( /target/24/dir1/file1, ...)上的目录中创建它。但是当我像这样使用它时
rsync /tmp/24/ host:/target
Run Code Online (Sandbox Code Playgroud)
但我想要做什么,那就是这样的创建它们:/target/dir1/file1。但是,scp如果目标文件夹已经存在,则做第一件事,第二件事是不考虑路径是否以结尾/。我怎样才能强制scp表现得像rsync第二个例子?
是否真的find不应该进行最简单的路径统一/简化操作,例如将多个连续的斜杠合并在一起(相当于原始形式)?
例如输出find .///是:
.///
.///somefile
[…]
Run Code Online (Sandbox Code Playgroud)
(测试find来自 GNU 和busybox)
如果是这样,那是为什么?有没有我遗漏的合理用例?也许对于有人正在搜索find内部脚本的输出的情况?
顺便说一句,同样有趣的是 GNU 的 find for find ./// -maxdepth 0 -printf '%h\n'(的输出%h应该是“文件名的前导目录(除了最后一个元素和它之前的斜杠之外的所有目录)”):(.//只是少了一个/)