フォルダ内のすべての_.html
_ファイルを検索し、_index.md
_という名前の別のファイルに[file](./file.html)
を追加します。私は次のコマンドを試しました:
_ls | awk "/\.html$/" | xargs -0 -I @@ -L 1 sh -c 'echo "[${@@%.*}](./@@)" >> index.md'
_
しかし、コマンド内で_@@
_を置き換えることはできませんか?何が悪いのですか?
注:ファイル名にはスペースなどの有効な文字を含めることができます
明確化:
_index.md
_の各行には[file](./file.html)
が含まれます。ここで、fileはフォルダー内の実際のファイル名です
lsを解析しない 。
これにはxargs
は必要ありません。find -exec
を使用できます。
これを試して、
find . -maxdepth 1 -type f -name "*.html" -exec \
sh -c 'f=$(basename "$1"); echo "[${f%.*}]($1)" >> index.md' sh {} \;
wantでxargs
を使用する場合は、次の非常に類似したバージョンを使用します。
find . -maxdepth 1 -type f -name "*.html" -print0 | \
xargs -0 -I{} sh -c 'f=$(basename "$1"); echo "[${f%.*}]($1)" >> index.md' sh {} \;
xargs
または-exec
を実行しない別の方法:
find . -maxdepth 1 -type f -name "*.html" -printf '[%f](./%f)\n' \
| sed 's/\.html\]/]/' \
> index.md
本当にxargs
が必要ですか?
ls *.html | Perl -pe 's/.html\n//;$_="[$_](./$_.html)\n"'
(100000以上のファイルがある場合):
printf "%s\n" *.html | Perl -pe 's/.html\n//;$_="[$_](./$_.html)\n"'
または(遅いが、短い):
for f in *.html; do echo "[${f%.*}](./$f)"; done