小编Mar*_*ngs的帖子

为什么会出现“点”文件的大小“.” 超过4096?

今天我发现了一个大小为 4MB 的“空”目录。

它没有可见的内容,所以我尝试了ls -lah. 这向我展示了一些隐藏文件(不是很大)。搜索目录如此大的原因,我发现点文件 ( .) 的大小为 3.9MB。

该文件中存储了什么?这不就是一种指向同一目录的链接吗?

这是外壳输出(匿名):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
Run Code Online (Sandbox Code Playgroud)

ls filesystems size directory ext4

10
推荐指数
1
解决办法
3116
查看次数

如何动态(并递归地)将所有文件从 gzip 转换为 xz?

我有一个带有 gzip 文件的目录树,如下所示:

basedir/a/file.dat.gz
basedir/b/file.dat.gz
basedir/c/file.dat.gz
etc.
Run Code Online (Sandbox Code Playgroud)

如何使用单个命令将所有这些从 gzip 转换为 xz 而不将每个文件解压缩到磁盘?

带有解压到磁盘的简单的两行代码如下所示:

find basedir/ -type f -name '*.dat.gz' -exec gzip -d {} \;
find basedir/ -type f -name '*.dat' -exec xz {} \;
Run Code Online (Sandbox Code Playgroud)

第一个命令甚至可以更短: gunzip -r *

对于单个文件,即时转换很简单(尽管这不会替换 .gz 文件):

gzip -cd basedir/a/file.dat.gz | xz > basedir/a/file.dat.xz
Run Code Online (Sandbox Code Playgroud)

由于 gzip 和 xz 自己处理扩展,我想说:

gunzip -rc * > xz
Run Code Online (Sandbox Code Playgroud)

我看了find | xargs basename -s .gz { }一点,但没有得到一个有效的解决方案。

我可以写一个shell脚本,但我觉得应该有一个简单的解决方案。


编辑

感谢所有已经回答的人。我知道我们都喜欢“永不失败的命令™”。所以,为了简单起见:

  • 所有子目录仅包含数字、字母(尽管是 äöü)、下划线和减号。
  • 所有文件都命名为file.dat[.n].gz,n为正整数
  • 任何目录或文件都不会在任何地方具有“.gz”(除了作为最终文件后缀)。
  • 这是这些目录包含的唯一内容。
  • 我控制命名并可以在需要时对其进行限制。

使用简单的find -exec …

pipe gzip recursive conversion xz

7
推荐指数
2
解决办法
4562
查看次数

如何在 mutt 命令行中指定附件编码?

我正在尝试从 Perl 脚本发送一封带有附件的电子邮件。

首先,我创建附件(一个 xml 文件):

open(XMLFILE, ">:utf8", $xmlfile);
print XMLFILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print XMLFILE "<data>\n";
#print XMLFILE "...\n";
print XMLFILE "</data>\n";
close (XMLFILE);
Run Code Online (Sandbox Code Playgroud)

我也尝试open(XMLFILE, ">", $xmlfile);binmode XMLFILE, ":utf8";

然后我像这样发送电子邮件:

open(MUTT, "|/usr/bin/mutt -s \"TestSubject\" -a $xmlfile \"test\@example.com\"");
binmode MUTT, ":utf8";
print MUTT ("TestBody");
close (MUTT);
Run Code Online (Sandbox Code Playgroud)

尽管如此,正文部分和附件都有Content-Type: text/plain; charset=iso-8859-1

我也尝试过open(MUTT, "|/usr/bin/mutt -e \"set file_charset=utf-8\" -a $xmlfile ...,但这给了我一个Error in command line: file_charset: unknown variable.

我究竟做错了什么?

command-line character-encoding email centos mutt

5
推荐指数
1
解决办法
9214
查看次数